使用 PowerShell 呼叫表示式
-
PowerShell 中的
Invoke-Expression
-
在 PowerShell 中使用
Invoke-Expression
將引數傳遞給指令碼 -
Invoke-Expression
與 PowerShell 中呼叫運算子的區別 -
PowerShell 中
Invoke-Command
與Invoke-Expression
的區別
Invoke-Expression
PowerShell cmdlet 在何時以及何時不使用時很容易被誤解。本文將教我們 Invoke-Expression
是如何工作的,以及我們如何將它付諸實踐。
PowerShell 中的 Invoke-Expression
Invoke-Expression
命令以指令碼塊的形式計算或執行特定字串,並返回命令或表示式的結果。它可以幫助呼叫指令碼中的程式碼,構建稍後執行的命令,或者通過使用者提供的輸入謹慎使用它。
Invoke-Expression
的一個示例是定義一個指令碼並將該字串傳遞給 Command
引數。
指令碼示例:
$getProcess = 'Get-Process'
Invoke-Expression -Command $getProcess
$pathFile = '.\Test.ps1'
Invoke-Expression -Command $pathFile
如果你將路徑項括在雙 ""
或單引號''
中,並且整個字串用引號引起來,Invoke-Expression
將按預期執行指令碼。你還可以指示指令碼檔案的完整路徑位置,如下例所示。
指令碼示例:
$pathFile = "C:\'Folder Path'\Test.ps1"
Invoke-Expression $pathFile
在 PowerShell 中使用 Invoke-Expression
將引數傳遞給指令碼
沒有使用 Invoke-Expression
傳遞引數的本地方法,但我們可以將它們包含在你提供給 Command
引數的字串中。我們可以通過提供引數將引數傳遞給該指令碼,而不是通過 Invoke-Expression
使用引數。
我們必須將整行包含在一個字串中,然後將該字串傳遞給 Command
引數。
指令碼示例:
$pathFile = 'C:\Scripts\Test.ps1'
$scriptParam = '-Path "C:\file.txt" -Force'
Invoke-Expression "$pathFile $scriptParam"
# or
$pathFile = 'C:\Scripts\Test.ps1 -Path "C:\test_file.txt" -Force'
Invoke-Expression $pathFile
Invoke-Expression
與 PowerShell 中呼叫運算子的區別
呼叫運算子 (&
) 用於執行指令碼、指令碼塊或命令,但它不會像 Invoke-Expression
那樣解釋 command
引數。
例如,我們將使用 Get-Process -ProcessName pwsh
cmdlet 獲取 PowerShell Core 程序。不幸的是,使用 call
運算子,連線 Get-Process
和引數將不起作用。
指令碼示例:
$getProc = "Get-Process"
## The script below will not work
& "$getProc pwsh"
如果我們使用 Invoke-Expression
執行此字串,該命令將執行,如下所示。
指令碼示例:
Invoke-Expression "$getProc pwsh"
PowerShell 中 Invoke-Command
與 Invoke-Expression
的區別
Invoke-Expression
cmdlet 僅將字串轉換為可執行程式碼。相比之下,Invoke-Command
命令允許我們在遠端或本地計算機上執行程式。
如果我們現在正在編寫執行的命令,則最好使用 Invoke-Command
cmdlet,因為我們在 IDE 中保留了 IntelliSense,而如果我們想從當前指令碼中呼叫另一個指令碼,則 Invoke-Expression
會更好。
指令碼示例:
## Invoke-Command
Invoke-Command -ScriptBlock {
Get-Process PowerShell
}
## Invoke-Expression
Invoke-Expression -Command "
Get-Process PowerShell
"
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn