la început, a existat un cmdlet…
de cele mai multe ori, când vă gândiți să scrieți ceva în PowerShell, veți găsi de obicei în primele linii un Get-ChildItem
, veți avea inevitabil un pentru fiecare buclă.
în mod normal, aș scrie acest lucru ca foreach($item in $items)
, dar cu o ocazie completarea automată a venit pe variabila matrice cu o .ForEach
opțiune, nu știam utilizarea corectă a acestui așa că am încercat de obicei
Get-Help ForEach -ExamplesGet-Help ForEach -Online
deoarece acest lucru nu a arătat cu adevărat această opțiune (pentru a fi sincer, poate că nu am mers la ajutorul potrivit de la PS), așa că am căutat pe Google același lucru, care inițial M-a dus la o pagină similară pe ss64.com, dar au furnizat un link către alte ForEach
opțiuni, dintre care una conținea modul de utilizare a ForEach (metoda)
cum se utilizează .ForEach
să vedem dacă pot explica în Cod:
$items.ForEach({# This exposes the $_ object, but I find that it doesn't know what each item is.# So I often find myself setting that to a new variable.$item = $_#I guess as you learn more and more you become versed in the ways of the object and can free type out the properties you need.})
după cum puteți vedea, această formă de scriere a unui ForEach permite încă o declarație multilinie și atâta timp cât știți ce proprietăți aveți după ce nu trebuie să setați obiectul $ _ (Dar știu că o voi face).
Feriți-vă de dragoni
există ceva să fie conștienți de în PowerShell versiunea 3. Dacă $array
ar putea fi nul, trebuie să verificați acest lucru înainte de a face acțiunile.
if($items -ne $null){...}
Dacă ați folosit PowerShell 2, este posibil să fiți deja conștienți de această problemă cu matricele.
în PowerShell 3 și deasupra buclei foreach se ocupă automat de obiectele matrice nule, dar nu va fi până când nu utilizați PowerShell 5 că metoda ForEach se ocupă de matrice nule.