当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中将字符串作为命令运行 [4 种方法]

作者:精品下载站 日期:2024-12-14 05:29:34 浏览:15 分类:玩电脑

在 PowerShell 中将字符串作为命令运行 [4 种方法]


[玩转系统] 在 PowerShell 中将字符串作为命令运行 [4 种方法]

使用 Invoke-Expression Cmdlet

使用 Invoke-Expression cmdlet 在 PowerShell 中将字符串作为命令运行。 Invoke-Expression cmdlet 将字符串计算为命令并返回字符串表达式的结果。
这是一个简单的示例:

使用及操作员:

$command = "notepad.exe"
Invoke-Expression $command

这将打开新的记事本窗口。

这是更复杂的例子。

使用调用表达式 Cmdlet:

$command = "Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5"
Invoke-Expression -Command $command

输出 :

   Handles  NPM(K)    PM(K)      WS(K)     CPU(s)      Id   SI ProcessName
-------  ------    -----      -----     ------     --  --   -----------
   1456     205   329656     294348     670.89   6328   3   Grammarly.Desktop
   2564      67   326064     354484     503.28  12276   3   chrome
    524      24   776508     798760     444.05   1248   3   chrome
    644      17     7196      21308     400.55  12324   3   SynTPEnh
   1420      41   315816     308592     394.67   8188   3   chrome

Invoke-Expression 将字符串计算为 PowerShell 表达式,允许您执行任何有效的 PowerShell 命令或脚本。例如,上面的代码按以下方式运行:

  • Get-Process:检索系统上当前正在运行的进程的列表。
  • Sort-Object -Property CPU -Descending:按 CPU 属性(表示每个进程的 CPU 使用率)按降序对进程列表进行排序。
  • Select-Object -First 5:从排序的进程列表中选择前五个项目。

$command 变量中定义命令后,我们使用 Invoke-Expression cmdlet 来执行存储在 $command 中的命令。此代码的输出是 CPU 使用率最高的前 5 个进程的列表,按降序排列。

使用 & 运算符

使用 & 运算符在 PowerShell 中将字符串作为命令运行

使用及操作员:

$command = "notepad.exe"
& $command

调用运算符 & 调用命令,就好像它是命令名称或函数一样。这允许您执行存储在变量中的命令或运行不在当前范围或路径中的命令。例如,上面的代码按以下方式运行:

  • 字符串变量 $command 使用可执行文件(在本例中为 notepad.exe)进行初始化。
  • 之后,使用调用运算符(&)来执行存储在$command中的命令。这告诉 PowerShell 运行 $command 中指定的可执行文件。在本例中,它启动了记事本应用程序。

使用双引号 ("")

使用双引号在 PowerShell 中将字符串作为命令运行。

使用双引号:

$filename = "File1.txt"
$command = "Get-Process | Out-File -FilePath <code>"E:$filename</code>""
Invoke-Expression -Command $command

File1.txt 文件的内容:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                     
-------  ------    -----      -----     ------     --  -- -----------                     
    507      20     8804      16768             13328   0 AppHelperCap                   
    773      43    36872      48716       9.02   1212   3 ApplicationFrameHost           
    318      17     3700      14256              3388   0 armsvc                         
    315      16   105520      19700       0.34   3760   0 audiodg                         
    555      24   409364     392232     505.98   1248   3 chrome                         
    399      32    24192      47240     120.28   2476   3 chrome                         
    255      16    18168      35456       0.23   5224   3 chrome                         
    260      17    43572      65600      18.72   7476   3 chrome                         
   1335      33   244596     226076     508.02   8188   3 chrome                         
   ...       ...  ...        ...        ...      ...    ...
   ...       ...  ...        ...        ...      ...    ...
   ...       ...  ...        ...        ...      ...    ...

上面的代码按以下方式运行:

  • 创建字符串变量 $filename,并将其设置为 File1.txt
  • 然后将 $command 变量设置为包含 PowerShell 命令的字符串,以获取正在运行的进程列表并将它们写入 E: 上具有指定文件名的文件中驾驶。
  • Out-File cmdlet 用于将 Get-Process cmdlet 的输出写入具有指定文件名的文件。反引号 (`) 转义字符串中的双引号。
  • 然后使用 Invoke-Expression cmdlet 执行存储在 $command 变量中的命令。
  • 此代码的输出是位于 E: 驱动器中名为 File1.txt 的文件,其中包含执行该命令时正在运行的进程的列表。

使用 [scriptblock]::Create() 方法

使用[scriptblock]::Create()方法在PowerShell中将字符串作为命令运行。

使用 Create() 方法:

$commandString = "Get-ChildItem C:\TEST1"
$commandBlock = [scriptblock]::Create($commandString)
& $commandBlock

输出 :

Mode                 LastWriteTime         Length   Name
----                 -------------         ------   ----
d-----         2/21/2023  11:26 PM                  FolderA
d-----         2/21/2023  11:27 PM                  FolderB
-a----         2/21/2023   9:32 PM              0   File1.txt
-a----         2/21/2023   9:32 PM              0   File2.txt

上面的代码按以下方式运行:

  • 代码块的第一行创建一个名为 $commandString 的变量,并将其值设置为 "Get-ChildItem C:\TEST1"
  • 之后,第二行使用 ScriptBlock 类的静态 Create() 方法创建一个名为 $commandBlock 的脚本块对象。 Create 方法采用字符串作为输入,并返回可作为 PowerShell 命令执行的脚本块对象。在本例中,传递给 Create() 的字符串是 $commandString 变量的值,即 "Get-ChildItem C:\TEST1".这将创建一个脚本块,表示带有参数 C:\TEST1Get-ChildItem 命令。
  • 最后,在最后一行代码中,使用调用运算符 (&) 来执行存储在 $commandBlock 变量中的脚本块。调用运算符告诉 PowerShell 将脚本块视为命令并运行它。脚本块依次执行带有参数 C:\TEST1Get-ChildItem 命令,该命令检索有关位于 C 中的文件和文件夹的信息:\TEST1 目录。

考虑到上述解决方案,在 PowerShell 中将字符串作为命令运行是一个强大的工具,可以帮助您自动执行复杂的任务并执行高级系统管理任务。此外,按照最佳实践,您可以安全有效地使用此功能来管理您的 Windows 系统。

这就是如何在 PowerShell 中将字符串作为命令运行的全部内容。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯