i början fanns det en cmdlet…
de flesta gånger, när du tänker på att skriva något i PowerShell, hittar du vanligtvis inom de första raderna ett Get-ChildItem
, du kommer då oundvikligen att ha en för varje slinga.
normalt skulle jag skriva detta som foreach($item in $items)
, men vid ett tillfälle kom autofullständig upp på arrayvariabeln med ett .ForEach
alternativ, Jag visste inte rätt användning av detta så jag försökte den vanliga
Get-Help ForEach -ExamplesGet-Help ForEach -Online
eftersom detta inte riktigt visade det här alternativet (för att vara ärlig kanske jag inte har gått till rätt hjälp från PS) så googlade jag samma sak, som ursprungligen tog mig till en liknande sida på ss64.com, men de gav en länk till andra ForEach
alternativ, varav en innehöll hur man använder ForEach (metod)
hur man använder .ForEach
låt oss se om jag kan förklara det i kod:
$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.})
som du kan se tillåter denna form av att skriva en ForEach fortfarande ett multiline-uttalande, och så länge du vet vilka egenskaper du är efter att du aldrig behöver ställa in $ _ – objektet (men jag vet att jag kommer).
akta dig för drakar
det finns något att vara medveten om i PowerShell version 3. Om $array
kan vara null måste du kontrollera det innan du gör dina åtgärder.
if($items -ne $null){...}
Om du har använt PowerShell 2 kanske du redan är medveten om detta problem med arrayer.
i PowerShell 3 och ovanför foreach loop hanterar null array-objekt automatiskt, men det kommer inte vara förrän du använder PowerShell 5 att ForEach-metoden hanterar null arrays.