about_Foreach-Parallel

简短说明

介绍了 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-ProcessGet-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}
       }
   }
}

另请参阅