Udostępnij za pośrednictwem


about_Foreach-Parallel

KRÓTKI OPIS

Opisuje konstrukcję języka w przepływie ForEach -Parallel pracy programu Windows PowerShell.

DŁUGI OPIS

Parametr Parallel słowa kluczowego ForEach uruchamia polecenia w ForEach bloku skryptu raz dla każdego elementu w określonej kolekcji.

Elementy w kolekcji, takie jak dysk w kolekcji dysków, są przetwarzane równolegle. Polecenia w bloku skryptu są uruchamiane sekwencyjnie na każdym elemencie w kolekcji.

ForEach -Parallel jest prawidłowy tylko w przepływie pracy programu Windows PowerShell.

SKŁADNIA

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

SZCZEGÓŁOWY OPIS

Podobnie jak instrukcja ForEach w programie Windows PowerShell, zmienna zawierająca kolekcję $<collection> musi być zdefiniowana przed instrukcją ForEach -Parallel , ale zmienna reprezentująca bieżący element $<item> jest zdefiniowana w instrukcji ForEach -Parallel .

Konstrukcja ForEach -Parallel różni się od słowa kluczowego ForEach i parametru Parallel . Słowo ForEach kluczowe przetwarza elementy w kolekcji w sekwencji. Parametr Parallel uruchamia polecenia w bloku skryptu równolegle. Blok skryptu równoległego można ująć w blok skryptu ForEach -Parallel .

Komputery docelowe w przepływie pracy, takie jak te określone przez wspólny parametr przepływu pracy PSComputerName , są zawsze przetwarzane równolegle. W tym celu nie trzeba określać słowa kluczowego ForEach -Parallel .

PRZYKŁADY

Poniższy przepływ pracy zawiera instrukcję ForEach -Parallel , która przetwarza dyski, które Get-Disk pobiera działanie. Polecenia w bloku skryptu ForEach -Parallel są uruchamiane sekwencyjnie, ale działają równolegle na dyskach. Dyski mogą być przetwarzane współbieżnie i w dowolnej kolejności.

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

W tej wersji przepływu pracy Get-Process polecenia i Get-Service są uruchamiane równolegle. Funkcja przepływu pracy kontynuuje pętlę ForEach -Parallel , w której polecenia są uruchamiane sekwencyjnie, ale działają równolegle na dyskach. Polecenia równoległe i pętla ForEach -Parallel są uruchamiane współbieżnie.

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

Zobacz też