about_Foreach-Parallel
简短说明
介绍了 Windows PowerShell 工作流中的 ForEach -Parallel
语言构造。
详细说明
ForEach
关键字的 Parallel 参数指示针对指定集合中的每个项将 ForEach
脚本块中的命令运行一次。
将对集合中的项(例如磁盘集合中的磁盘)进行并行处理。 脚本块中的命令按顺序针对集合中的每个项运行。
ForEach -Parallel
仅在 Windows PowerShell 工作流中有效。
SYNTAX
ForEach -Parallel ($<item> in $<collection>)
{
[<Activity1>]
[<Activity2>]
...
}
详细说明
如 Windows PowerShell 中的 ForEach 语句一样,包含集合 $<collection>
的变量必须在 ForEach -Parallel
语句之前定义,但表示当前项 $<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}
}
}
}