Revizuirea și utilizarea buclei ForEach în scripturile Windows PowerShell
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 $users[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ă
PowerShell 7 adaugă parametrul -Parallel la cmdlet-ul ForEach-Object . Acest lucru permite pipeline-ului să proceseze simultan mai multe obiecte, ceea ce poate oferi performanțe mai bune decât o buclă ForEach standard. Ia în considerare să folosești asta dacă folosești PowerShell 7. Exemplul următor arată cum să folosești ForEach-Object cu parametrul.-Parallel
$users | ForEach-Object -Parallel { Set-ADUser $_ -Department "Marketing" }
Notă
În interiorul unui -Parallel bloc de script, se folosește $_ pentru a face referire la obiectul curent al pipeline-ului — la fel ca într-un bloc obișnuit ForEach-Object . Aceasta este diferită de o foreach afirmație, unde denumești tu variabila de iterație. Dacă trebuie să accesați o variabilă definită în afara blocului paralel, prefixați-o cu modificatorul Using: de scop — de exemplu, $Using:department.
Implicit, parametrul -Parallel procesează cinci elemente simultan. Poți crește sau scădea această limită cu parametrul.-ThrottleLimit