about_Foreach-Parallel

KORT BESKRIVNING

Beskriver språkkonstruktionen ForEach -Parallel i Windows PowerShell-arbetsflödet.

LÅNG BESKRIVNING

Parametern Parallell för nyckelordet ForEach kör kommandona i ett skriptblock en ForEach gång för varje objekt i en angiven samling.

Objekten i samlingen, till exempel en disk i en samling diskar, bearbetas parallellt. Kommandona i skriptblocket körs sekventiellt på varje objekt i samlingen.

ForEach -Parallel är endast giltigt i ett Windows PowerShell-arbetsflöde.

SYNTAX

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

DETALJERAD BESKRIVNING

Precis som ForEach-instruktionen i Windows PowerShell måste variabeln som innehåller samlingen $<collection> definieras före -instruktionen ForEach -Parallel , men variabeln som representerar det aktuella objektet $<item> definieras i -instruktionen ForEach -Parallel .

Konstruktionen ForEach -Parallel skiljer sig från nyckelordet ForEach och parametern Parallel . Nyckelordet ForEach bearbetar objekten i samlingen i följd. Parametern Parallel kör kommandon i ett skriptblock parallellt. Du kan omsluta ett parallellskriptblock i ett ForEach -Parallel skriptblock.

Måldatorerna i ett arbetsflöde, till exempel de som anges av den vanliga parametern för PSComputerName-arbetsflödet , bearbetas alltid parallellt. Du behöver inte ange nyckelordet för det här ändamålet ForEach -Parallel .

EXEMPEL

Följande arbetsflöde innehåller en ForEach -Parallel instruktion som bearbetar diskarna som Get-Disk aktiviteten får. Kommandona i skriptblocket ForEach -Parallel körs sekventiellt, men de körs parallellt på diskarna. Diskarna kan bearbetas samtidigt och i valfri ordning.

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

I den här versionen av arbetsflödet Get-Process körs kommandona och Get-Service parallellt. Arbetsflödesfunktionen fortsätter till loopen ForEach -Parallel där kommandona körs sekventiellt, men de körs parallellt på diskarna. De parallella kommandona och loopen ForEach -Parallel körs samtidigt.

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

Se även