na začátku, tam byl rutiny…
Většinou, když si myslíte, že o psaní něco v PowerShell, budete obvykle najít v rámci první linie Get-ChildItem
, pak budete nevyhnutelně mít pro každou smyčku.
Normálně bych to napsat jako foreach($item in $items)
, ale při jedné příležitosti automatického dokončování přišel na proměnné pole s .ForEach
možnost, Nevěděl jsem, že správné používání tohoto tak jsem se snažil obvyklé
Get-Help ForEach -ExamplesGet-Help ForEach -Online
Tak tohle jsem opravdu ukázat tuto možnost (abych byl upřímný, možná jsem se šel do správné pomoci z PS) takže jsem si vygooglila to samé, což zpočátku mě vzal na podobné stránky na ss64.com, ale poskytli odkaz na další možnosti ForEach
, z nichž jedna obsahovala, jak používat ForEach (metoda)
jak používat .ForEach
podívejme se, jestli můžu to vysvětlit v kódu:
$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.})
Jak můžete vidět, tato forma psaní ForEach stále umožňuje víceřádkové prohlášení, a tak dlouho, jak budete vědět, jaké vlastnosti jste po, jste nikdy muset nastavit $_ objekt (ale vím, že bude).
Dejte si pozor na draky
ve verzi PowerShell verze 3 je třeba si uvědomit něco. Pokud $array
může být null, musíte to před provedením akcí zkontrolovat.
if($items -ne $null){...}
Pokud jste použili PowerShell 2, můžete si být vědomi tohoto problému s pole již.
v PowerShell 3 a vyšší smyčka foreach zpracovává objekty nulového pole automaticky, ale až při použití PowerShell 5 metoda ForEach zpracovává pole null.