Gennemse og brug ForEach-løkken i Windows PowerShell-scripts

Fuldført

Når du udfører piping, anvendes kommandoerne i pipelinen på hvert objekt. I nogle tilfælde skal du muligvis bruge cmdlet'en ForEach-Object til at behandle dataene i pipelinen. Når du gemmer data i en matrix, giver ForEach--konstruktionen dig mulighed for at behandle hvert element i matrixen.

ForEach--konstruktionen bruger følgende syntaks:

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

I det forrige eksempel er der en matrix med navnet $users, der indeholder AD DS-brugerobjekter (Active Directory-domæneservices). Den ForEach--konstruktion behandler Windows PowerShell-kommandoerne mellem klammeparenteserne én gang for hvert objekt. Når kommandoerne behandles, er $user den variabel, der indeholder hvert element fra matrixen. Ved den første gentagelse indeholder $user$users[0], og ved den anden gentagelse indeholder $user$users[1]. Dette fortsætter, indtil alle elementer i matrixen er blevet behandlet én gang.

I et script er den ForEach--konstruktion den mest almindelige måde at behandle elementer på, som du har placeret i en matrix. Det er nemt at bruge, fordi du ikke behøver at kende antallet af elementer for at behandle dem.

I det forrige eksempel er der kun én kommando mellem klammeparenteserne, men du kan tilføje mange kommandoer, som behandles for hver løkke. Indrykningen af kommandoer mellem klammeparenteserne er efter konvention for at gøre det nemmere at gennemse scriptet. Indrykningen er ikke et teknisk krav, men det er en god praksis.

Navngivning af variabler i ForEach--løkken skal give mening. Det meste af tiden identificerer du tydeligt den variabel, der bruges i løkken, som en enkelt forekomst af matrixen. For en matrix med navnet $userskan den variabel, der bruges i løkken, f.eks. være $user. Du vil måske bemærke eksempler på variabler med et enkelt bogstav, der er det samme som det første bogstav i matrixen. Dette bør dog kun bruges i enkel kode, hvor det er nemt at se, at de er relateret.

Parallel ydeevne

PowerShell 7 tilføjer parameteren -Parallel til ForEach-Object cmdlet'en. Dette gør det muligt for pipelinen at behandle flere objekter samtidigt, hvilket kan give bedre ydeevne end en standard ForEach-løkke . Overvej at bruge dette, hvis du bruger PowerShell 7. Følgende eksempel viser, hvordan man bruger ForEach-Object med parameteren -Parallel .

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

Bemærk

Inde i en -Parallel scriptblok bruges $_ det til at referere til det aktuelle pipeline-objekt — det samme som i en almindelig ForEach-Object blok. Dette er anderledes end en foreach sætning, hvor du selv navngiver iterationsvariablen. Hvis du skal tilgå en variabel defineret uden for den parallelle blok, skal du præfikse den med scope-modifikatoren Using: — for eksempel $Using:department.

Som standard behandler parameteren -Parallel fem elementer ad gangen. Du kan øge eller mindske denne grænse med parameteren -ThrottleLimit .