Revizuirea și utilizarea buclei ForEach în scripturile Windows PowerShell

Finalizat

Când efectuați conducte, comenzile din conductă sunt aplicate fiecărui obiect. În unele cazuri, poate fi necesar să utilizați cmdletul ForEach-Object pentru a procesa datele din canal. Când stocați date într-o matrice, construcția ForEach vă permite să procesați fiecare element din matrice.

Construcția ForEach utilizează următoarea sintaxă:

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

În exemplul anterior, există o matrice numită $users care conține obiecte de utilizator Active Directory Domain Services (AD DS). Construcția ForEach procesează comenzile Windows PowerShell între acolade o dată pentru fiecare obiect. Când comenzile sunt procesate, $user este variabila care conține fiecare element din matrice. La prima iterație, $user conține $users[0], iar la a doua iterație, $user conține $user[1]. Acest lucru continuă până când toate elementele din matrice au fost procesate o singură dată.

Într-un script, construcția ForEach este cea mai comună modalitate de a procesa elementele pe care le-ați plasat într-o matrice. Este ușor de utilizat, deoarece nu trebuie să știți numărul de elemente pentru a le procesa.

Exemplul anterior are o singură comandă între acolade, dar puteți adăuga mai multe comenzi, care vor fi procesate pentru fiecare buclă. Indentarea comenzilor între acolade este prin convenție pentru a face scriptul mai ușor de revizuit. Indentarea nu este o cerință tehnică, dar este o bună practică.

Denumirea variabilelor din bucla ForEach ar trebui să fie semnificativă. De cele mai multe ori, identificați clar variabila utilizată în buclă ca o singură instanță a matricei. De exemplu, pentru o matrice numită $users, variabila utilizată în buclă ar putea fi $user. Este posibil să observați exemple de variabile cu o singură literă care este aceeași cu litera inițială a matricei. Cu toate acestea, acest lucru ar trebui utilizat numai în cod simplu, unde este ușor de spus că sunt înrudiți.

Performanță paralelă

În PowerShell 7, parametrul -Parallel a fost adăugat la cmdletul ForEach-Object . Acest lucru permite conductei să proceseze mai multe obiecte simultan. Procesarea simultană a mai multor obiecte poate oferi performanțe mai bune decât o buclă ForEach standard. Ar trebui să luați în considerare acest lucru dacă utilizați PowerShell 7. Următorul exemplu explică cum să utilizați ForEach-Object cu parametrul -Parallel .

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

În mod implicit, parametrul -Parallel permite procesarea a cinci elemente simultan. Puteți modifica acest lucru pentru a fi mai mare sau mai mic utilizând parametrul -ThrottleLimit .