在PowerShell中有两种并行使用foreach循环的方法。
使用Foreach-Object -Parallel命令(在PowerShell 7.0或更高版本中支持)
在工作流中使用Foreach -Parallel(支持PowerShell 5.1或更低版本)
假设我们有Servers.txt,其中包含10台服务器。当我们使用Parallel for循环时,不能保证首先选择哪个服务器循环,如下所示,并带有两个示例。
使用Foreach - Object - Parallel命令。(不是Foreach -Parallel)
此Foreach-Object -Parallel命令功能已新添加到PowerShell版本7.0或更高版本中。
$servers = Get-Content C:\Temp\Servers.txt $servers | foreach-Object -parallel{ Write-output "Working on $_" }输出结果
PS C:\> C:\Temp\Test1.ps1 Working on IndiaServer003 Working on IndiaServer002 Working on IndiaServer001 Working on USServer001 Working on IndiaServer005 Working on USServer002 Working on IndiaServer006 Working on NZServer001 Working on NZServer002
如果您有更多服务器,还可以设置-Throttlelimit参数,但需要确保系统不会由于节流阀限制而耗尽,因为它将创建更多的运行空间。
使用PowerShell工作流。
如果使用的是PowerShell 5.1,则可以使用工作流功能Foreach -Parallel并行运行循环。例如,
Workflow TestParallel{ Foreach -parallel($server in (Get-Content C:\Temp\Servers.txt)){ Write-Output "Working on $Server" } } TestParallel输出结果
PS C:\WINDOWS\system32> C:\Temp\Test1.ps1 Working on NZServer002 Working on NZServer001 Working on USServer002 Working on USServer001 Working on IndiaServer006 Working on IndiaServer005 Working on IndiaServer003 Working on IndiaServer002 Working on IndiaServer001