如何在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

更新于:2021年2月19日

10K+浏览量

启动您的职业生涯

通过完成课程获得认证

开始学习
广告