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
广告