如何在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+瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告