在本地计算机上运行命令或表达式。
语法
Invoke-Expression [-Command] <string> [<CommonParameters>]
说明
Invoke-Expression cmdlet 以命令形式计算或运行指定的字符串,并返回表达式或命令的结果。如果没有 Invoke-Expression,在命令行提交的字符串将原样返回(回显)。
参数
-Command <string>
指定要运行的命令或表达式。键入该命令或表达式,或输入包含该命或表达式的变量。 Command 参数是必需的。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.String 或 PSObject 可以通过管道将表示命令的对象传递到 Invoke-Expression。使用 $input 自动变量可表示命令中的输入对象。 |
输出 |
PSObject 返回所调用的命令生成的输出(Command 参数的值)。 |
说明
-- 表达式是可以计算并生成结果的语句,如 Windows PowerShell 命令。
-- 在脚本中使用 Invoke-Expression cmdlet 时一定要谨慎。使用 Invoke-Expression 运行用户输入的命令时,在运行前需要验证该命令是安全的。通常,最好设计脚本包含预定义的输入选项,而不允许随意输入。
示例 1
C:\PS>$command = "Get-Process" C:\PS> $command Get-Process C:\PS> invoke-expression $command Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 296 4 1572 1956 20 0.53 1348 AdtAgent 270 6 1328 800 34 0.06 2396 alg 67 2 620 484 20 0.22 716 ati2evxx 1060 15 12904 11840 74 11.48 892 CcmExec 1400 33 25280 37544 223 38.44 2564 communicator ... 说明 ----------- 此示例演示了如何使用 Invoke-Expression 计算表达式。如果没有 Invoke-Expression,将输出表达式,但不计算。 第一个命令将“Get-Process”的值(字符串)赋值给 $command 变量。 第二个命令显示在命令行键入变量名称的效果。Windows PowerShell 回显该字符串。 第三个命令使用 Invoke-Expression 计算该字符串。
示例 2
C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1" C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression 说明 ----------- 这些命令使用 Invoke-Expression 在本地计算机上运行脚本 TestScript.ps1。这两个命令是等效的。第一个命令使用 Command 参数来指定要运行的命令。第二个命令使用管道运算符 (|) 将命令字符串发送到 Invoke-Expression。
示例 3
C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}' C:\PS> iex $command 说明 ----------- 此示例运行 $cmd 变量中保存的一个命令字符串。 该命令字符串括在单引号中,因为它包含一个变量 $_,该变量表示当前对象。如果该命令字符串括在双引号中,$_ 变量在被保存在 $command 字符串中之前将被它自己的值所替换。
示例 4
C:\PS>$cmdlet_name = "get-eventlog" C:\PS> $example_number = 1 C:\PS> $example_code = (get-help $cmdlet_name).examples.example[($example_number-1)].code C:\PS> invoke-expression $example_code 说明 ----------- 此命令检索和运行 Get-EventLog cmdlet 帮助主题中的第一个示例。 若要运行其他 cmdlet 的示例,请将 $cmdlet_name 变量的值更改为该 cmdlet 的名称。另外,请要将 $example_number 变量更改为要运行的示例编号。如果示例数字无效,该命令将失败。
另请参阅