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-
- Co to jest Skrypty powłoki?
- Polecenia PowerShell
- Operatory PowerShell
- Zastosowania PowerShell
- Przewodnik po tablicy w PowerShell z przykładami