Kontrola a použití smyčky ForEach ve skriptech Windows PowerShellu

Dokončeno

Při provádění potrubí se příkazy v kanálu použijí pro každý objekt. V některých případech možná budete muset ke zpracování dat v kanálu použít rutinu ForEach-Object . Při ukládání dat do pole umožňuje konstruktor ForEach zpracovat každou položku v poli.

Konstruktor ForEach používá následující syntaxi:

ForEach ($user in $users) {
     Set-ADUser $user -Department "Marketing"
}

V předchozím příkladu je pole s názvem$users, které obsahuje objekty uživatele Doména služby Active Directory Services (AD DS). Konstruktor ForEach zpracovává příkazy Prostředí Windows PowerShell mezi složenými závorkami jednou pro každý objekt. Při zpracování příkazů je proměnná, $user která obsahuje každou položku z pole. Při první iteraci obsahuje a při druhé iteraci $user$users[0] obsahuje $user.$user[1] To pokračuje, dokud nebudou všechny položky v poli zpracovány jednou.

Ve skriptu je konstruktor ForEach nejběžnějším způsobem zpracování položek, které jste umístili do pole. Je to snadné, protože nemusíte znát počet položek, které chcete zpracovat.

Předchozí příklad obsahuje pouze jeden příkaz mezi složenými závorkami, ale můžete přidat mnoho příkazů, které budou zpracovány pro každou smyčku. Odsazení příkazů mezi složenými závorkami je konvence, aby se skript snadněji kontroluje. Odsazení není technickým požadavkem, ale je to dobrý postup.

Pojmenování proměnných ve smyčce ForEach by mělo být smysluplné. Ve většině případů jasně identifikujete proměnnou použitou ve smyčce jako jednu instanci pole. Například pro pole s názvem $usersmůže být $userproměnná použitá ve smyčce . Můžete si všimnout příkladů proměnných s jedním písmenem, které je stejné jako počáteční písmeno pole. To by se ale mělo použít jenom v jednoduchém kódu, kde je snadné zjistit, že souvisí.

Paralelní výkon

V PowerShellu 7 se do rutiny ForEach-Object přidal parametr -Parallel. Kanál tak může zpracovávat více objektů současně. Zpracování více objektů současně může poskytovat lepší výkon než standardní smyčka ForEach . Měli byste to zvážit, pokud používáte PowerShell 7. Následující příklad vysvětluje, jak použít ForEach-Object s parametrem -Parallel .

$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }

Ve výchozím nastavení parametr -Parallel umožňuje zpracování pěti položek najednou. Tuto hodnotu můžete upravit tak, aby byla větší nebo menší pomocí parametru -ThrottleLimit .