about_Foreach-Parallel
KRÁTKÝ POPIS
Popisuje konstruktor jazyka ForEach -Parallel
v pracovním postupu Windows PowerShellu.
DLOUHÝ POPIS
Parametr Parallel klíčového ForEach
slova spouští příkazy v ForEach
bloku skriptu jednou pro každou položku v zadané kolekci.
Položky v kolekci, například disk v kolekci disků, se zpracovávají paralelně. Příkazy v bloku skriptu se spouštějí postupně u každé položky v kolekci.
ForEach -Parallel
je platný pouze v pracovním postupu Windows PowerShellu.
SYNTAXE
ForEach -Parallel ($<item> in $<collection>)
{
[<Activity1>]
[<Activity2>]
...
}
PODROBNÝ POPIS
Stejně jako příkaz ForEach ve Windows PowerShellu musí být proměnná obsahující kolekci $<collection>
definována před ForEach -Parallel
příkazem, ale proměnná představující aktuální položku $<item>
je definována ForEach -Parallel
v příkazu.
Konstruktor ForEach -Parallel
se liší od klíčového ForEach
slova a parametru Parallel . Klíčové ForEach
slovo zpracovává položky v kolekci v posloupnosti. Parametr Parallel spouští příkazy v bloku skriptu paralelně. Blok paralelního ForEach -Parallel
skriptu můžete uzavřít do bloku skriptu.
Cílové počítače v pracovním postupu, například počítače určené běžným parametrem pracovního postupu PSComputerName , se vždy zpracovávají paralelně.
Pro tento účel nemusíte zadávat ForEach -Parallel
klíčové slovo.
PŘÍKLADY
Následující pracovní postup obsahuje ForEach -Parallel
příkaz, který zpracovává disky, které Get-Disk
aktivita získá. Příkazy v ForEach -Parallel
bloku skriptu se spouštějí postupně, ale běží paralelně na discích. Disky se můžou zpracovávat souběžně a v libovolném pořadí.
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
}
}
V této verzi pracovního postupu Get-Process
Get-Service
se příkazy spouští paralelně. Funkce pracovního postupu pokračuje ve ForEach -Parallel
smyčce, ve které se příkazy spouštějí postupně, ale běží paralelně na discích. Paralelní příkazy a smyčka ForEach -Parallel
se spouští souběžně.
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}
}
}
}