Informacje o przełączniku
KRÓTKI OPIS
Wyjaśniono, jak używać przełącznika do obsługi wielu instrukcji If.
DŁUGI OPIS
Aby sprawdzić warunek w skrycie lub funkcji, użyj If
instrukcji . Instrukcja If
może sprawdzić wiele typów warunków, w tym wartość zmiennych i właściwości obiektów.
Aby sprawdzić wiele warunków, użyj instrukcji Switch
. Instrukcja Switch
jest równoważna serii instrukcji If, ale jest prostsza. Instrukcja Switch
zawiera listę każdego warunku i akcję opcjonalną. Jeśli warunek zostanie uzyskany, zostanie wykonana akcja.
Instrukcja Switch
używa również zmiennej automatycznej $switch
. Aby uzyskać więcej informacji, zobacz about_Automatic_Variables.
Podstawowa Switch
instrukcja ma następujący format:
Switch (<test-value>)
{
<condition> {<action>}
<condition> {<action>}
}
Na przykład poniższa Switch
instrukcja porównuje wartość testu 3 z każdym z warunków. Gdy wartość testu jest zgodna z warunkiem, wykonywana jest akcja.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
W tym prostym przykładzie wartość jest porównywana z każdym warunkiem na liście, mimo że istnieje dopasowanie wartości 3. Poniższa Switch
instrukcja zawiera dwa warunki dla wartości 3. Pokazuje, że domyślnie wszystkie warunki są testowane.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Three again.
Aby przekierować Switch
element , aby przestać porównywać po dopasowaniu, użyj instrukcji Break
. Instrukcja Break
kończy instrukcję Switch
.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."; Break}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Jeśli wartość testu jest kolekcją, taką jak tablica, każdy element w kolekcji jest oceniany w kolejności, w której się pojawi. W poniższych przykładach przedstawiono ocenę 4, a następnie 2.
switch (4, 2)
{
1 {"It is one." }
2 {"It is two." }
3 {"It is three." }
4 {"It is four." }
3 {"Three again."}
}
It is four.
It is two.
Wszystkie Break
instrukcje dotyczą kolekcji, a nie do każdej wartości, jak pokazano w poniższym przykładzie. Instrukcja Switch
jest przerywana przez instrukcję Break
w warunku wartości 4.
switch (4, 2)
{
1 {"It is one."; Break}
2 {"It is two." ; Break }
3 {"It is three." ; Break }
4 {"It is four." ; Break }
3 {"Three again."}
}
It is four.
Składnia
Składnia pełnej Switch
instrukcji jest następująca:
switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
lub
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
Jeśli nie są używane żadne parametry, Switch
wykonuje dokładne dopasowanie wielkości liter dla wartości. Jeśli wartość jest kolekcją, każdy element jest oceniany w kolejności, w której się pojawi.
Instrukcja Switch
musi zawierać co najmniej jedną instrukcję warunku.
Klauzula Default
jest wyzwalana, gdy wartość nie jest zgodna z żadnymi warunkami. Jest ona równoważna Else
klauzuli w instrukcji If
. Tylko jedna Default
klauzula jest dozwolona w każdej Switch
instrukcji.
Switch
ma następujące parametry:
Parametr | Opis |
---|---|
Symbol wieloznaczny | Wskazuje, że warunek jest ciągiem wieloznacznymi. |
Jeśli klauzula match nie jest ciągiem, parametr jest | |
Ignorowane. | |
Exact | Wskazuje, że klauzula match, jeśli jest ciągiem, musi |
dopasuj dokładnie. Jeśli klauzula match nie jest ciągiem, ten parametr | |
Parametr jest ignorowany. | |
Casesensitive | Wykonuje dopasowanie uwzględniające wielkość liter. Jeśli klauzula match nie jest |
ciąg, ten parametr jest ignorowany. | |
Plik | Pobiera dane wejściowe z pliku zamiast instrukcji value. Jeśli użytkownik |
uwzględnionych jest wiele parametrów pliku , tylko ostatni parametr jest | |
Używane. Każdy wiersz pliku jest odczytywany i oceniany przez | |
Switch Instrukcja. |
|
Regex | Wykonuje wyrażenie regularne pasujące do wartości |
Warunek. Jeśli opcja | |
klauzula match nie jest ciągiem. Ten parametr jest ignorowany. |
Uwaga
Podczas określania wartości powodujących konflikt, takich jak Regex i Symbol wieloznaczny, ostatni określony parametr ma pierwszeństwo, a wszystkie parametry powodujące konflikt są ignorowane. Dozwolone jest również wiele wystąpień parametrów. Jednak tylko ostatni używany parametr jest skuteczny.
W tym przykładzie nie ma pasującego przypadku, więc nie ma żadnych danych wyjściowych.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
Dodając klauzulę Default
, można wykonać akcję, gdy żadne inne warunki nie powiedzie się.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
Default {
"No matches"
}
}
No matches
Aby wyraz "czternastu" był zgodny z przypadkiem, należy użyć parametru -Wildcard
or -Regex
.
PS> switch -Wildcard ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
That's too many.
W poniższym przykładzie użyto parametru -Regex
.
$target = 'user@contoso.com'
switch -Regex ($target)
{
'ftp\://.*' { "$_ is an ftp address"; Break }
'\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address
Warunek Switch
instrukcji może być taki:
- Wyrażenie, którego wartość jest porównywana z wartością wejściową
- Blok skryptu, który powinien zostać zwrócony
$true
, jeśli warunek zostanie spełniony. Blok skryptu odbiera bieżący obiekt do porównania w zmiennej automatycznej$_
i jest oceniany we własnym zakresie.
Akcja dla każdego warunku jest niezależna od akcji w innych warunkach.
W poniższym przykładzie pokazano użycie bloków skryptów jako Switch
warunków instrukcji.
switch ("Test")
{
{$_ -is [String]} {
"Found a string"
}
"Test" {
"This executes as well"
}
}
Found a string
This executes as well
Jeśli wartość jest zgodna z wieloma warunkami, akcja dla każdego warunku jest wykonywana. Aby zmienić to zachowanie, użyj Break
słów kluczowych lub Continue
.
Słowo Break
kluczowe zatrzymuje przetwarzanie i kończy instrukcję Switch
.
Słowo Continue
kluczowe przestaje przetwarzać bieżącą wartość, ale kontynuuje przetwarzanie wszelkich kolejnych wartości.
Poniższy przykład przetwarza tablicę liczb i wyświetla, czy są nieparzyste, czy nawet. Liczby ujemne są pomijane za pomocą słowa kluczowego Continue
. Jeśli napotkano inny niż liczba, wykonanie zostanie zakończone Break
słowem kluczowym.
switch (1,4,-1,3,"Hello",2,1)
{
{$_ -lt 0} { Continue }
{$_ -isnot [Int32]} { Break }
{$_ % 2} {
"$_ is Odd"
}
{-not ($_ % 2)} {
"$_ is Even"
}
}
1 is Odd
4 is Even
3 is Odd