在本機電腦上執行命令或運算式。

語法

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 變數變更成您想要執行的範例編號。如果範例編號無效,這個命令將會失敗。






請參閱




目錄