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-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}
       }
   }
}

另请参阅