脚本块如何在PowerShell中工作?

脚本块是一组可以在调用时一起执行的命令。通常,在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
猜你喜欢