Windows_PowerShell_iconczę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

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.