conditional switch
często zamiast budowy skomplikowanych IFów lepiej jest skorzystać ze switcha. czyli zamienić złożoną składnię bazowaną na wielu 'if-then-else’ dużo czytelniejszym i prostszym blokiem 'switch’. to oczywista oczywistość ale jest coś bardziej 'zaawansowanego’ co jeszcze bardziej ułatwia życie – PowerShellowy Switch pozwala nie tylko na proste porównania, czy definicje wildcardów, które można znaleźć w manualu, ale również na tworzenie złożonych wyrażeń logicznych.
przykład takiego switcha:
test-switch.ps1
param( [int]$int ) switch($int) { 1 { write-host 'normalka'} {2 -or 3} {write-host 'ten sam dla dwóch wartości'} {$_ -ge 4} { write-host 'wieksze niz 3'} {$_ -ge 5} { write-host 'wieksze niz 4' break; } {$_ -lt 8} {write-host 'mniejsze niz 8 [ale nie wieksze niz 4]'} default { write-host 'wszystkie inne'} }
uwagę należy zwrócić na:
- zastosowanie 'break’ – standardowo switch wykona *wszystkie* bloki, spełniające warunek. w przypadku wywołania test-switch z parametrem 1 lub 2 pojawi się dodatkowo informacja ’mniejsze niż 4 [ale nie większe niż 2]’ . jeśli liczba będzie większa niż 3, wpadnie w klauzulę z 'break’ i ostatni krok nie zostanie wykonany. dla tego należy pamiętać, że *kolejność ma znaczenie*.
- dzięki temu, że switch wykonuje wszystkie bloki spełniające warunek, można zrobić krok typu 'catch all’ – który wykona się zawsze. ale warto umieścić go jako pierwszy tak, żeby nie przerwał go jakiś break. najlepiej użyć 'switch -wildcard’ -> manual.
- w instrukcji [man switch] można znaleźć bardzo fajne przykłady dla wyrażeń regularnych i wildcardów, dla tego pomijam go w tym prostym przykładzie. ale warto wiedzieć, że można wykonywać również zaawansowane porównania na ciągach znaków.
- to czego zabrakło w manualu to właśnie przykład wyrażenia logicznego. klauzulą może być dowolne wyrażenie zamknięte w nawiasach klamrowych {} . oczywiście dla determinizmu zachowania powinno zwracać true/false.
- PS switch nie pozwala na definiowane tego samego bloku dla kilq wartości [listy] tak, jak to się robi np. w VBS, czyli nie da się zdefiniować ’ 1,2 { blok } ’ . w zamian można użyć warunku logicznego '{1 -or 2} {blok} ’ . trochę mniej wygodne, ale działa tak samo (:
proste i wydajne. proponuję dla gimnastyki rozpisać to sobie na IFach… (;
eN.
szkolenie PowerShell – jak pisać skrypty
w końcu! materiał na długo utknął w postprodukcji (; ale w końcu jest – 3cia część szkolenia, tym razem już dla mniej-początqjących – 'jak pisać skrypty/funkcje’. szkolenie jest na pewno ciekawsze, ponieważ towarzyszy mi Darek Porowski, który pilnuje żebym nie przynudzał za bardzo. i to [chyba] zadziałało q:
zachęcam do zapoznanie się z materiałem i oceny ::))o- PowerShell dla zaawansowanych – http://aka.ms/plmva-psadv
eN.