Invoke-Expression
在本地计算机上运行命令或表达式。
语法
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
说明
Invoke-Expression
cmdlet 将指定的字符串作为命令进行评估或运行,并返回表达式或命令的结果。 如果没有 Invoke-Expression
,则在命令行中提交的字符串将按原样返回(回显)。
表达式在当前作用域内评估和运行。 有关详细信息,请参阅 about_Scopes。
注意
在脚本中使用 Invoke-Expression
cmdlet 时,请采取合理的预防措施。 使用 Invoke-Expression
运行用户输入的命令时,请在运行前验证运行该命令是安全的。 通常,最好将脚本设计为包含预定义的输入选项,而不允许随意输入。
示例
示例 1:计算表达式
$Command = "Get-Process"
$Command
Get-Process
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
变量。
第二个命令显示在命令行键入变量名称的效果。 PowerShell 回显该字符串。
第三个命令使用 Invoke-Expression
来评估字符串。
示例 2:在本地计算机上运行脚本
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression
这些命令使用 Invoke-Expression
在本地计算机上运行脚本 TestScript.ps1。 这两个命令是等效的。 第一个命令使用 Command 参数来指定要运行的命令。
第二个命令使用管道运算符 (|
) 将命令字符串发送到 Invoke-Expression
。
示例 3:运行变量中的命令
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
此示例运行 $Command
变量中保存的一个命令字符串。
该命令字符串括在单引号中,因为它包含一个表示当前对象的变量 $_
。 如果该命令字符串括在双引号中,则 $_
变量在被保存到 $Command
变量中之前,将被替换为其值。
示例 4:获取并运行 cmdlet 帮助示例
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code
此命令检索并运行 Get-EventLog
cmdlet 帮助主题中的第一个示例。
若要运行其他 cmdlet 的示例,请将 $Cmdlet_name
变量的值更改为该 cmdlet 的名称。 另外,请将 $Example_number
变量更改为要运行的示例编号。 如果示例数字无效,该命令将失败。
注意
如果帮助文件中的示例代码具有示例中的输出,则 PowerShell 将尝试运行输出以及代码,这会引发错误。
参数
-Command
指定要运行的命令或表达式。 键入该命令或表达式,或输入包含该命或表达式的变量。 Command 参数是必需的。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
输入
可以通过管道将表示要调用的表达式的字符串传递给此 cmdlet。 使用 $Input
自动变量来表示命令中的输入对象。
可以通过管道将表示要调用的表达式的对象传递给此 cmdlet。 使用 $Input
自动变量来表示命令中的输入对象。
输出
None
此 cmdlet 不返回其自身的输出,但被调用的命令可能会返回输出。
备注
PowerShell 包含 Invoke-Expression
的以下别名:
- 所有平台:
iex
在大多数情况下,可以使用 PowerShell 的调用运算符来调用表达式并实现相同的效果。 调用运算符是一种更安全的方法。 有关详细信息,请参阅 about_Operators。