如何在PowerShell中并行使用foreach循环?
PowerShell中并行使用foreach循环有两种方法。
使用Foreach-Object -Parallel命令(PowerShell 7.0或更高版本支持)
在工作流中使用Foreach -Parallel(PowerShell 5.1或更低版本支持)
假设我们有Servers.txt文件,其中包含10台服务器。当我们使用并行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
广告