脚本块是一组可以在调用时一起执行的命令。通常,在PowerShell中,我们编写单个命令。脚本块可以用两个大括号括起来。
$sb = {Get-Process powershell; Get-Service W32Time}
在这里,我们在脚本块下编写了两个命令。如果直接运行此命令,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参数在脚本块内部传递参数。参数声明将与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