PowerShell 中 scriptblock 如何工作的?
Scriptblock 是一組可以在呼叫時一起執行的命令。在 PowerShell 中,我們通常編寫單個命令。Scriptblock 可以用兩個大括號編寫。
示例
$sb = {Get-Process powershell; Get-Service W32Time}這裡我們在 scriptblock 下編寫了兩個命令。如果你直接執行此命令,scriptblock 會將它們視為一個字串。
PS C:\> $sb Get-Process powershell; Get-Service W32Time
若要在 scritblock 中執行命令,請將 Invoke-Command 與 -Scriptblock 引數一起使用。
Invoke-Command -ScriptBlock $sb
輸出
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 529 44 240240 256164 36.02 7668 1 powershell Status : Running Name : W32Time DisplayName : Windows Time
要在遠端計算機上執行命令,請使用 -ComputerName 引數。
示例
Invoke-Command -ComputerName Test1-Win2k16,Test1-Win2k12 -ScriptBlock $sb
輸出
PS C:\Scripts\AppdInstallation_Remote> Invoke-Command -ComputerName Test1- Win2k16,Test1-Win2k12 -ScriptBlock $sb Handles NPM(K) PM(K) WS(K) CPU(s) Id SI P rocessName PSComputerName ------- - ----- ----- ----- ------ -- -- ----------- -------------- 434 29 46200 47564 0.70 3228 1 powershell Test1-Win2k12 Status : Running Name : Spooler DisplayName : Print Spooler PSComputerName : Test1-Win2k12 583 29 57892 64636 0.59 4524 1 powershell Test1-Win2k16 Status : Stopped Name : Spooler DisplayName : Print Spooler PSComputerName : Test1-Win2k16
你還可以使用 InvokeCommand cmdlet 中的 -ArgumentList 引數在 scriptblock 中傳遞引數。param 的宣告將與 PowerShell 中的函式相同。
示例
Invoke-Command -ComputerName Test1-Win2k16,Test1-Win2k12 -ScriptBlock $sb
$sb = {
param($process,$service)
Get-Process -Name $process
Get-Service -Name $service
}
Invoke-Command -ScriptBlock $sb -ArgumentList "PowerShell","W32Time"輸出
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 43 234.39 22.84 43.61 7668 1 powershell Status : Running Name : W32Time DisplayName : Windows Time
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP