Granska och använd ForEach-loopen i Windows PowerShell-skript
När du utför rördragning tillämpas kommandona i pipelinen på varje objekt. I vissa fall kan du behöva använda cmdleten ForEach-Object för att bearbeta data i pipelinen. När du lagrar data i en matris kan du med ForEach-konstruktionen bearbeta varje objekt i matrisen.
ForEach-konstruktionen använder följande syntax:
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
I föregående exempel finns det en matris med namnet $users som innehåller användarobjekt för Active Directory-domän Services (AD DS).
ForEach-konstruktionen bearbetar Windows PowerShell-kommandona mellan klammerparenteserna en gång för varje objekt. När kommandona bearbetas $user är variabeln som innehåller varje objekt från matrisen. På den första iterationen $user innehåller $users[0], och på den andra iterationen, $user innehåller $user[1]. Detta fortsätter tills alla objekt i matrisen har bearbetats en gång.
I ett skript är ForEach-konstruktionen det vanligaste sättet att bearbeta objekt som du har placerat i en matris. Det är enkelt att använda eftersom du inte behöver känna till antalet objekt för att bearbeta dem.
I föregående exempel finns bara ett kommando mellan klammerparenteserna, men du kan lägga till många kommandon som bearbetas för varje loop. Indraget för kommandon mellan klammerparenteserna är enligt konventionen för att göra skriptet enklare att granska. Indraget är inte ett tekniskt krav, men det är en bra idé.
Namngivning av variabler i ForEach-loopen bör vara meningsfullt. För det mesta identifierar du tydligt variabeln som används i loopen som en enda instans av matrisen. För en matris med namnet $userskan variabeln som används i loopen till exempel vara $user. Du kanske ser exempel på variabler med en enda bokstav som är samma som den första bokstaven i matrisen. Detta bör dock endast användas i enkel kod där det är enkelt att se att de är relaterade.
Parallella prestanda
I PowerShell 7 lades parametern -Parallel till i cmdleten ForEach-Object . Detta gör att pipelinen kan bearbeta flera objekt samtidigt. Bearbetning av flera objekt samtidigt kan ge bättre prestanda än en ForEach-standardloop. Du bör överväga detta om du använder PowerShell 7. I följande exempel beskrivs hur du använder ForEach-Object med parametern -Parallel .
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
Som standard tillåter parametern -Parallel att fem objekt bearbetas åt gången. Du kan ändra detta så att det blir större eller mindre med parametern -ThrottleLimit .