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

相关文章