alussa oli cmdlet…
useimmiten, kun ajattelet kirjoittavasi jotain Powershelliin, löydät yleensä ensimmäisten rivien sisältä Get-ChildItem
, sinulla on sitten väistämättä jokaiselle silmukalle.
normaalisti kirjoittaisin tämän foreach($item in $items)
, mutta erään kerran automaattitäydennys tuli vastaan array-muuttujalla .ForEach
optio, en tiennyt tämän oikeaa käyttöä, joten kokeilin tavallista
Get-Help ForEach -ExamplesGet-Help ForEach -Online
koska tämä ei oikein näyttänyt tätä vaihtoehtoa (ollakseni rehellinen en ehkä mennyt oikeaan apuun PS: ltä), niin googlasin saman asian, joka vei minut aluksi samanlaiselle sivulle ss64: llä.com, mutta ne tarjosivat linkin muihin ForEach
– vaihtoehtoihin, joista yksi sisälsi Foreachin (metodi) käytön
käytön .ForEach
katsotaan, pystynkö selittämään sen koodilla:
$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.})
kuten näette, tämä Foreachin kirjoitusmuoto sallii vielä monirivisen lausuman, ja kunhan tietää mitä ominaisuuksia on, kun ei tarvitse koskaan asettaa $ _ – objektia (mutta tiedän sen kyllä).
Beware of Dragons
PowerShellin versiossa 3 on jotain tiedostettavaa. Jos $array
voi olla nolla, sinun täytyy tarkistaa se ennen kuin teet tekosi.
if($items -ne $null){...}
Jos olet käyttänyt PowerShell 2: ta, saatat olla tietoinen tästä ongelmasta jo matriiseissa.
PowerShell 3: ssa ja sen yläpuolella foreach-silmukka käsittelee nollarakenteita automaattisesti, mutta ForEach-menetelmä käsittelee nollarakenteita vasta PowerShell 5: n käytön jälkeen.