Invoke-Expression
在本地電腦執行指令或表達式。
語法
Default (預設值)
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
Invoke-Expression cmdlet 會以指令形式評估或執行指定的字串,並回傳該表達式或指令的結果。 若無 Invoke-Expression,命令列提交的字串會被回傳(回碼)且未更改。
運算式會被評估並在目前範圍內執行。 如需詳細資訊,請參閱 about_Scopes。
Caution
在腳本中使用 Invoke-Expression 指令長時,請採取合理的預防措施。 使用使用者輸入的指令時 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,表達式會被列印,但不會被評估。
第一個指令會為變數指派一個(字串)$Command值Get-Process。
第二個指令顯示在命令列輸入變數名稱的效果。 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
此指令會擷取並執行 cmdlet 說明主題中的 Get-EventLog 第一個範例。
要執行另一個 cmdlet 的範例,請將變數值 $Cmdlet_name 改成 cmdlet 名稱。 然後,把變數改 $Example_number 成你想執行的範例數字。 若範例編號不正確,指令會失敗。
Note
如果說明檔中的範例程式碼在範例中有輸出,PowerShell 會嘗試將輸出與程式碼一同執行,並會拋出錯誤。
參數
-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。