如何在PowerShell中并行使用foreach循环?

阅读 633 收藏 0 点赞 0 评论 0

在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

评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号