Wprowadzenie do sprawy S witch w PowerShell

Funkcja przełączania w programie PowerShell służy do obsługi wielu instrukcji If lub innymi słowy, zastępuje wiele warunków If / Else If / Else. Aby sprawdzić pojedynczy warunek w skrypcie lub funkcji, możesz użyć instrukcji If / else, ale jeśli chcesz ocenić więcej instrukcji IF, użyj polecenia Switch.

Przełączanie jest lepsze w porównaniu do wielu instrukcji If, łatwe do wdrożenia i proste w użyciu do kodowania. Każda instrukcja zawiera wiele warunków, a gdy jeden z nich spełnia, wykonywana jest akcja.

Składnia:

Switch ()
(
(Action1)
(Action2)
)

Pełna składnia:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

LUB

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Parametry wielkości liter w programie PowerShell

  • Regex : Nazywa się to również wyrażeniem regularnym. Wykonuje sprawdzenie wyrażenia regularnego względem wartości warunku. Jeśli używasz Regex, WildCard i Exact są ignorowane. Ponadto, jeśli klauzula dopasowania nie jest łańcuchem, ten parametr jest ignorowany.
  • Symbol wieloznaczny : wskazuje, że warunkiem jest łańcuch wieloznaczny. Jeśli używasz symboli wieloznacznych, wyrażenia regularne i dokładne są ignorowane. Ponadto, jeśli klauzula dopasowania nie jest łańcuchem, ten parametr jest ignorowany.
  • Dokładne : Wykonuje dopasowanie do dokładnego ciągu. Jeśli użyjesz opcji Dokładne, symbole wieloznaczne i wyrażenie regularne są ignorowane, a jeśli klauzula dopasowania nie jest łańcuchem, ten parametr jest ignorowany.
  • CaseSensitive: Ten parametr sprawdzi warunek, który jest dokładnie zgodny z przekazaną wartością (rozróżniana jest wielkość liter), jeśli nie pasuje, wówczas ten parametr jest ignorowany. Potrzebuje również wartości ciągu.
  • Plik : pobiera ścieżkę pliku jako wartość wejściową, a nie ciąg znaków. Jeśli zostanie przekazanych wiele parametrów pliku, zajmie to tylko ostatni. Każdy wiersz pliku jest odczytywany i oceniany pod kątem warunku, a jeśli warunek jest zgodny, wówczas wykonuje tę wartość lub wyświetla napisany komunikat.

Schemat blokowy

Jak działa przełącznik w programie PowerShell?

Jak pokazano na powyższym diagramie, za każdym razem, gdy przekazywana jest jakakolwiek wartość (ciąg, liczba całkowita, liczba zmiennoprzecinkowa lub inne typy danych), tablica, symbole wieloznaczne, pliki itp., Zaczyna dopasowywać warunki jeden po drugim, a gdy warunki są zgodne, skrypt wykonuje ten blok . W przypadku wielu pasujących wartości zostanie wykonany blok wielu skryptów, a jeśli nie zostanie znaleziona pasująca wartość i jeśli zostanie określony warunek domyślny, wówczas wykonuje ten blok, w przeciwnym razie wyjście jest puste.

Przykłady przełączników w PowerShell

Zobaczmy podany przykład:

Przykład 1

1. Prosta funkcja przełączania z ciągiem, przekazana wartość całkowita.

Kod:

switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)

Wyjście: trzy

Kod:

switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)

Dane wyjściowe: dane wykonane

A co jeśli parametr nie pasuje do wyrażenia. Jako przykład podany poniżej 5 nie pasuje do żadnego z przypadków Switch. W takim przypadku wynik będzie zerowy.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)

Aby rozwiązać powyższy problem, domyślnie należy określić i domyślny blok jest wykonywany, gdy żaden z parametrów nie pasuje.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)

Wyjście: Nie znaleziono dopasowania

Przykład nr 2

Zobaczmy podany przykład:

Różnica między if / else if / else a Switch. Z poniższego przykładu można zrozumieć, jak łatwo napisać skrypt za pomocą funkcji Switch.

$time = 3
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")

$time = 3
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)

Wyjście: Jest godzina trzecia

Czas wykonania dla obu metod.

$time = 3
Measure-Command (
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")
)

TotalMilliseconds: 39, 1416

$time = 3
Measure-Command (
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)
)

TotalMilliseconds: 25, 6802

Różnica: 13, 4614 milisekund

Różnica staje się ogromna, gdy piszesz masywny skrypt lub funkcje wewnątrz przełącznika.

1. Przełącz z parametrem Regex

Jeśli Regex jest wymieniony w przełączniku, ocenia wyrażenie z przekazaną wartością i jeśli część warunku jest zgodna, wówczas wykonuje tę operację.

Rozważ poniższy przykład.

Kod:

Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Wyjście: Nic nie wspomniano

Po dodaniu Regex.

Kod:

Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Dane wyjściowe : Wspomniany jest Osioł

Osioł jest wspomniany ponownie

2. Przełącz za pomocą parametru Wildcard

Symbol wieloznaczny działa podobnie do parametru Like.

Kod:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)

Wyjście: błąd WMI

3. Przełącz z Dokładnym parametrem

Dokładna funkcja jest domyślna w Switch. Nie ma znaczenia, czy go użyjesz, czy nie. Ale jeśli używasz dwóch parametrów jednocześnie, pierwszeństwo ma ostatni parametr.

Kod:

Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Wyjście: brak świata

Kod:

Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Wyjście: Hello World

4. Przełącz z parametrem pliku

Możesz podać ścieżkę pliku bezpośrednio do Switcha jako parametr. Możesz użyć pliku ze ścieżką do pliku zamiast nadawać mu zmienne wyrażenie.

Kod:

Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)

Wynik:

Możesz użyć $ PSItem lub $ _ do pracy z bieżącymi przedmiotami.

5. Przełącz z parametrem CaseSensitive

Gdy używasz parametru rozróżniającego wielkość liter w przełączniku, wówczas warunek musi być dokładnie taki sam dla każdego znaku.

Kod:

switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)

Wyjście: To nie pasuje

6. Przekazywanie wartości tablicy w celu przełączenia funkcji

Prosta tablica:

switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)

Wynik:

Dziesięć

Dwanaście

Obiekt przekazujący tablicę

Kod:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)

Wynik:

Operacja usuwania maszyny wirtualnej

Operacja tworzenia maszyny wirtualnej

7. Stan pęknięcia

Po określeniu warunku przerwania Operacja przerywa działanie w tej pętli i nie można kontynuować dalszego wykonywania. Jest to bardzo pomocne, gdy nie chcesz sprawdzać dalszych kroków, gdy warunek jest spełniony, a czas wykonania staje się krótszy.

Kod:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" (
"VM Delete Operation"
break )
"VM_Create" (
"VM Create Operation"
break)
"VM_Shutdown" (
"VM Shutdown Operation"
break
)
)

Wynik:

Operacja usuwania maszyny wirtualnej

Jeśli zauważysz, wykonywany jest tylko jeden blok, a następnie wychodzi on z funkcji przełączania.

8. Kontynuuj Warunek

Parametr Kontynuuj służy do pominięcia określonej iteracji. Na przykład, jeśli trzeba dopasować 3 elementy, najpierw zostanie wykonane, a gdy warunek się spełni, pominie kolejne kroki i przejdzie do następnego.

Kod:

switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)

Wyjście: wykonywany jest pierwszy blok

Jak widać, przekazano tylko jeden argument („Cześć”), wykonuje on pierwszy blok tylko dlatego, że wyrażenie jest zgodne i nie ma już innego argumentu do wykonania, skrypt się zakończy.

  • Jeszcze jeden mieszany przykład przerwy i kontynuuj z Switch.

Kod:

switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)

Wynik:

Wykonuje się pierwszy blok

Wykonuje się drugi blok

Wniosek

Podsumowując, Switch jest znacznie lepszy niż implementacja wielu warunków If i zapewnia większą funkcjonalność i skrócenie czasu wykonywania.

Polecane artykuły

To był przewodnik po Switch Case w PowerShell. Tutaj omawiamy również składnię, parametry i przykłady wielkości liter w Powershell. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej-

  1. Co to jest Skrypty powłoki?
  2. Polecenia PowerShell
  3. Operatory PowerShell
  4. Zastosowania PowerShell
  5. Przewodnik po tablicy w PowerShell z przykładami

Kategoria: