Invoke-Expression
在本機電腦上執行命令或表達式。
語法
Default (預設值)
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
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 |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
String
您可以透過管線傳送一個字串,表示要在此 cmdlet 中使用的運算式。 使用 $Input 自動變數來表示命令中的輸入物件。
PSObject
您可以使用管線傳送代表要呼叫的運算式的物件給這個 Cmdlet。 使用 $Input 自動變數來表示命令中的輸入物件。
輸出
None
此 Cmdlet 不會傳回自己的輸出,但叫用的命令可能會傳回輸出。
備註
PowerShell 包含下列 Invoke-Expression的別名:
- 所有平臺:
iex
在大部分情況下,您會使用PowerShell的呼叫運算符叫用表達式,並達到相同的結果。 呼叫運算子是更安全的方法。 如需詳細資訊,請參閱 about_Operators。