如何在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
廣告
資料結構
網路
關係型資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP