obudowa przełącznika w PowerShell

wprowadzenie do przełącz case w PowerShell
funkcja przełącz w PowerShell jest używana do obsługi wielu instrukcji if lub w innych terminach jest to zastąpienie wielu 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 obliczyć więcej instrukcji IF, użyj Switch.
Switch jest lepszy w porównaniu do wielu instrukcji If oraz łatwy do wdrożenia i prosty w użyciu do kodowania. W każdej instrukcji Jest wiele warunków, a gdy jeden z nich spełni, to akcja jest wykonywana.
rozpocznij bezpłatny kurs nauki o danych
Hadoop, Data Science, Statistics& inne
składnia:
Switch (<Value>)
{
<Condition1> {Action1}
<Condition2> {Action2}
}
pełna składnia:
Switch ( <value> ) {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
lub
Switch -file {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
parametry obudowy przełącznika w PowerShell
- regex: jest również nazywany wyrażeniem regularnym. Wykonuje sprawdzenie wyrażenia regularnego względem wartości warunku. Jeśli używasz wyrażenia regularnego, symbole wieloznaczne i Exacts są ignorowane. Ponadto, jeśli klauzula match nie jest łańcuchem znaków, to ten parametr jest ignorowany.
- Wildcard: wskazuje, że warunek jest ciągiem znaków wieloznacznych. Jeśli używasz symbolu wieloznacznego, wyrażenia regularne i Exacts są ignorowane. Ponadto, jeśli klauzula match nie jest łańcuchem znaków, to ten parametr jest ignorowany.
- Exact: wykonuje dopasowanie z dokładnym ciągiem znaków. Jeśli używasz Exact, Wildcard i Regex są ignorowane, a jeśli klauzula match nie jest ciągiem znaków, to ten parametr jest ignorowany.
- CaseSensitive: ten parametr sprawdzi warunek, który jest dokładnie zgodny z przekazaną wartością (rozróżnia wielkość liter), jeśli nie jest zgodny, wtedy parametr ten jest ignorowany. Potrzebuje również wartości łańcuchowej.
- plik: przyjmuje ścieżkę do pliku jako wartość wejściową, a nie jako wartość łańcuchową. Jeśli przekazywanych jest wiele parametrów pliku, zajmuje to tylko ostatni. Każdy wiersz pliku jest odczytywany i obliczany względem warunku i jeśli warunek jest zgodny, to wykonuje tę wartość lub wyświetla pisemną wiadomość.
SCHEMAT BLOKOWY

Jak działa przełącznik w PowerShell?
jak pokazano na powyższym diagramie, ilekroć dowolna wartość (string, Integer, float lub inne typy danych), tablica, symbole wieloznaczne, pliki, itd. jest przekazywana wtedy zaczyna dopasowywać warunki jeden po drugim, a gdy warunek pasuje, skrypt wykonuje ten blok. Dla wielu pasujących wartości, zostanie wykonany blok wielu skryptów i jeśli nie znaleziono pasującej wartości i jeśli podany jest warunek domyślny, to wykonuje ten blok, w przeciwnym razie nie ma wyjścia null.
przykłady przypadku przełącznika w PowerShell
zobaczmy podany przykład:
przykład# 1
1. Prosta funkcja przełączania z ciągiem znaków, wartość całkowita przekazana.
Kod:
switch (3) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
Wyjście:

Kod:
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
Wyjście:

teraz, co zrobić, jeśli parametr nie pasuje do wyrażenia. Jako przykład podany poniżej, 5 nie pasuje do żadnego z przypadków przełączników. W tym przypadku wyjście będzie równe null.
Kod:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
aby rozwiązać powyższy problem, default musi określić i domyślny blok zostanie wykonany, gdy żaden z parametrów nie pasuje.
Kod:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
default{"No Match Found"}
}
Wyjście:

przykład# 2
zobaczmy podany przykład:
różnica pomiędzy if /else if / else I switch. Z poniższego przykładu możesz zrozumieć, jak łatwo jest napisać skrypt za pomocą funkcji przełącznika.
Kod:
$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"}
}
Output:

Execution time for both the methods.
Code:
$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 :

Code:
$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:

różnica: 31.3154 milisekund
różnica ta staje się ogromna, gdy piszesz ogromny skrypt lub funkcje wewnątrz przełącznika.
1. Switch z parametrem Regex
Jeśli W switch jest mowa o wyrażeniu regularnym, to oblicza wyrażenie z przekazaną wartością i jeśli część warunku jest zgodna, wtedy 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:

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"}
}
Wyjście:

2. Przełącznik z parametrem Wildcard
Wildcard 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:

3. Przełącznik z dokładnym parametrem
funkcja Exact jest domyślna w przełączniku. Nie ma znaczenia, czy go używasz, czy nie. Ale kiedy używasz dwóch parametrów w tym samym czasie, to ostatni parametr ma pierwszeństwo.
Kod:
Switch -Regex -Exact ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}
Wyjście:

Kod:
Switch -Exact -Regex ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}
wyjście:

4. Przełącznik z parametrem pliku
możesz podać ścieżkę pliku bezpośrednio do przełącznika jako parametr. Możesz użyć pliku ze ścieżką do pliku zamiast dawać mu wyrażenie zmiennej.
Kod:
Switch -Wildcard -File C:\temp\switchtest.txt {
"*Warning*"{Write-Warning $PSItem}
"*Error*"{Write-Error $PSItem}
}
Wyjście:

możesz użyć $PSItem lub $_ do pracy z bieżącymi elementami.
5. Przełącznik z parametrem CaseSensitive
gdy używasz parametru Casesensitive w przełączniku, warunek musi być dokładnie dopasowany przez każdy znak.
Kod:
switch -CaseSensitive ("Hello") {
"HeLlo" {"This is different HeLlo"}
Default {"This is not Matching"}
}
Wyjście:

6. Przekazywanie wartości tablicy do funkcji przełączania
prosta tablica :
switch (10,12) {
9 { "Nine" }
10 { "Ten" }
11 {"Eleven"}
12 {"Twelve"}
Default {"None"}
}
Wyjście:

przekazywanie kodu obiektu tablicy
:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {"VM Delete Operation"}
"VM_Create" {"VM Create Operation"}
"VM_Shutdown" {"VM Shutdown Operation"}
}
Wyjście:

7. Warunek Break
gdy określisz warunek break, wtedy operacja zostanie przerwana w tej pętli i nie będzie mogła kontynuować dalszego wykonywania. Jest to bardzo pomocne, gdy nie chcesz sprawdzać dalszych kroków, gdy warunek spełnia, a czas wykonania staje się szybszy.
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
}
}
Wyjście:

Jeśli zauważysz, że wykonywany jest tylko jeden blok, a następnie wychodzi z funkcji przełącznika.
8. Warunek Continue
parametr Continue jest używany do pominięcia konkretnej iteracji. Na przykład, jeśli są 3 elementy do dopasowania, to najpierw zostanie wykonane, a gdy warunek pasuje, pominie inne kroki i przejdzie do następnego kroku.
Kod:
switch ('Hello') {
"hello" {'First Block Executes'
continue}
'HELLO' {'Second Block Executes'
continue }
'HeLLo' {'Third Block Exectues'
continue }
Default {'Nothing executed'}
}
Wyjście:

jak widać podano tylko jeden argument (’Hello’), wykonuje on pierwszy blok tylko dlatego, że wyrażenie jest dopasowane i nie ma innego argumentu do wykonania, skrypt się zakończy.
- jeszcze jeden mieszany przykład break i dalej Switch.
Kod:
switch ('Alpha','Beta','Delta') {
"Alpha" {'First Block Executes'
continue}
'Beta' {'Second Block Executes'
break }
'Delta' {'This will not Execute'}
}
Wyjście:

podsumowanie
Podsumowując, Switch jest znacznie lepszy niż implementacja wielu warunków If I zapewnia większą funkcjonalność oraz redukcję czasu wykonania.
Polecane artykuły
To był przewodnik do przełączania przypadków w PowerShell. Tutaj również omówimy składnię, parametry i przykłady przypadków przełączników w Powershell. Możesz również zajrzeć do poniższych artykułów, aby dowiedzieć się więcej-
- czym jest Skryptowanie powłoki?
- polecenia PowerShell
- operatory PowerShell
- zastosowania Powershell
- Przewodnik po tablicy w PowerShell z przykładami
- przykłady Regex w PowerShell
- kompletny przewodnik po funkcjach w skryptach powłoki
- Naucz się echa w skryptach powłoki
- przykłady przypadków przełączników w skryptach powłoki
- Python Switch Case / jak zaimplementować?
Leave a Reply