Scriptblock 在 PowerShell 中如何工作?
powershellmicrosoft technologiessoftware & coding更新于 2026/2/12 3:52:17
Scriptblock 是一组命令,它们在调用时可以一起执行。在 PowerShell 中,我们通常编写单独的命令。Scriptblock 可以用两个花括号来编写。
示例
$sb = {Get-Process powershell; Get-Service W32Time}
这里我们在 scriptblock 下编写了两个命令。如果直接运行此命令,Scriptblock 会将它们视为字符串。
PS C:\> $sb Get-Process powershell; Get-Service W32Time
要运行 scriptblock 中的命令,请使用带有 -Scriptblock 参数的 Invoke-Command 命令。
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 参数在脚本块内传递参数。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

