na początku był cmdlet…
większość razy, kiedy myślisz o napisaniu czegoś w PowerShell, Zwykle znajdziesz w pierwszych wierszach Get-ChildItem
, wtedy nieuchronnie będziesz mieć dla każdej pętli.
normalnie zapisałbym to jako foreach($item in $items)
, ale pewnego razu autouzupełnianie pojawiło się na zmiennej tablicowej z opcją .ForEach
, nie znałem poprawnego użycia tej opcji, więc próbowałem zwykłej
Get-Help ForEach -ExamplesGet-Help ForEach -Online
ponieważ ta opcja nie pokazywała tej opcji (szczerze mówiąc, mogłem nie skorzystać z odpowiedniej pomocy z PS), więc wygooglowałem to samo, co początkowo przeniosło mnie na podobną stronę na ss64.com, ale podali link do innych opcji ForEach
, z których jedna zawierała sposób użycia metody ForEach ()
How to use .ForEach
zobaczmy, czy mogę to wyjaśnić w kodzie:
$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 widać, ta forma pisania ForEach nadal pozwala na wielowierszową instrukcję i tak długo, jak wiesz, jakich właściwości szukasz, nigdy nie musisz ustawiać obiektu $ _ (ale wiem, że to zrobię).
uwaga na smoki
w PowerShell w wersji 3 jest coś, o czym należy pamiętać. Jeśli $array
może być null, musisz sprawdzić to przed wykonaniem swoich działań.
if($items -ne $null){...}
jeśli używałeś PowerShell 2, możesz być świadomy tego problemu z tablicami.
w PowerShell 3 i powyżej pętla foreach automatycznie obsługuje obiekty tablicy null, ale dopiero po użyciu PowerShell 5 metoda ForEach obsługuje tablice null.