简短说明
介绍了 Windows PowerShell 工作流中的 foreach -Parallel
语言构造。
详细说明
关键字的 Parallel 参数指示针对指定集合中的每个项将 foreach
脚本块中的命令运行一次。foreach
将对集合中的项(例如磁盘集合中的磁盘)进行并行处理。 脚本块中的命令按顺序针对集合中的每个项运行。
foreach -Parallel
仅在 Windows PowerShell 工作流中有效。
SYNTAX
foreach -Parallel ($<item> in $<collection>) {
[<Activity1>]
[<Activity2>]
...
}
详细说明
与 Windows PowerShell 中的 foreach
语句一样,必须在 foreach -Parallel
语句之前定义包含集合 $<collection>
的变量,但表示当前项 $<item>
的变量在 foreach -Parallel
语句中定义。
foreach -Parallel
构造不同于 foreach
关键字和 Parallel 参数。
foreach
关键字指示按顺序处理集合中的各个项。 Parallel 参数指示以并行方式运行脚本块中的命令。 你可以将 Parallel 脚本块放在 foreach -Parallel
脚本块中。
工作流中的目标计算机(例如由 PSComputerName 工作流通用参数指定的计算机)始终并行处理。
无需指定 foreach -Parallel
关键字来实现此目的。
示例
下面的工作流包含一个 foreach -Parallel
语句,该语句处理 Get-Disk
活动获取的磁盘。
foreach -Parallel
脚本块中的命令按顺序运行,但它们对磁盘并行运行。 可能会以并发方式按任何顺序来处理磁盘。
workflow Test-Workflow {
$Disks = Get-Disk
# The disks are processed in parallel.
foreach -Parallel ($Disk in $Disks)
{
# The commands run sequentially on each disk.
$DiskPath = $Disk.Path
$Disk | Initialize-Disk
Set-Disk -Path $DiskPath
}
}
在此版本的工作流中,Get-Process
和 Get-Service
命令并行运行。 工作流函数继续执行到 foreach -Parallel
循环,其中的命令按顺序运行,但它们对磁盘并行运行。 并行的命令和 foreach -Parallel
循环并发运行。
workflow Test-Workflow {
#Run commands in parallel.
parallel
{
Get-Process
Get-Service
}
$Disks = Get-Disk
# The disks are processed in parallel.
foreach -Parallel ($Disk in $Disks)
{
# The commands run in parallel on each disk.
parallel
{
Initialize-Disk
inlinescript {.\Get-DiskInventory}
}
}
}