Dela via


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 samling $<collection> definieras före foreach -Parallel-instruktionen, men variabeln som representerar det aktuella objektet $<item> definieras i foreach -Parallel-instruktionen.

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