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