Поделиться через


about_Foreach-Parallel

КРАТКОЕ ОПИСАНИЕ

Описывает конструкцию ForEach -Parallel языка в рабочем процессе Windows PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

Параметр Parallel ключевого ForEach слова выполняет команды в блоке ForEach скрипта один раз для каждого элемента в указанной коллекции.

Элементы в коллекции, такие как диск в коллекции дисков, обрабатываются параллельно. Команды в блоке скрипта выполняются последовательно для каждого элемента в коллекции.

ForEach -Parallel действителен только в рабочем процессе Windows PowerShell.

SYNTAX

ForEach -Parallel ($<item> in $<collection>)
{
    [<Activity1>]
    [<Activity2>]
    ...
}

ПОДРОБНОЕ ОПИСАНИЕ

Как и инструкция ForEach в Windows PowerShell, переменная, содержащая коллекцию $<collection> , должна быть определена перед ForEach -Parallel инструкцией, но переменная, представляющая текущий элемент $<item> , определена в инструкции ForEach -Parallel .

Конструкция ForEach -Parallel отличается от ключевого ForEach слова и параметра Parallel . Ключевое ForEach слово обрабатывает элементы в коллекции в последовательности. Параллельный параметр выполняет команды в блоке скриптов параллельно. В блок скрипта можно заключить блок параллельных 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}
       }
   }
}

См. также