在本地计算机上运行命令或表达式。

语法

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 变量更改为要运行的示例编号。如果示例数字无效,该命令将失败。






另请参阅




目录