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


about_Foreach-Parallel

Назначение: Windows PowerShell 3.0

РАЗДЕЛ

about_ForEach-Parallel

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

Содержит описание языковой конструкции ForEach -Parallel в рабочем процессе Windows PowerShell®.

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

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

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

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

СИНТАКСИС

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

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

Как и в случае с оператором ForEach в Windows PowerShell, переменную, содержащую коллекцию ($<Коллекция>), необходимо определить до оператора ForEach -Parallel, но переменная, которая представляет текущий элемент ($<Элемент>), определяется в самом операторе 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
            }
        }



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

СМ. ТАКЖЕ

Создание рабочего процесса сценария (https://go.microsoft.com/fwlink/?LinkId=262872)

about_ForEach

about_Language_Keywords

about_Parallel

about_Workflows