Udostępnij przez


Informacje o Switchu

KRÓTKI OPIS

Wyjaśnia, jak używać przełącznika do obsługi wielu instrukcji If.

DŁUGI OPIS

Aby sprawdzić warunek w skrycie lub funkcji, użyj instrukcji If. Instrukcja If może sprawdzać 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 spełniony, wykonywana jest akcja.

W instrukcji Switch używana jest również zmienna automatyczna $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. Następująca instrukcja Switch ma 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 skierować Switch, 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ść testowa jest kolekcją, taką jak tablica, każdy element w kolekcji jest obliczany w kolejności, w jakiej się pojawia. 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 instrukcje Break mają zastosowanie do 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

Switch Pełna składnia 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 bez uwzględniania wielkości liter dla wartości. Jeśli wartość jest kolekcją, każdy element jest obliczany w kolejności, w jakiej się pojawia.

Instrukcja Switch musi zawierać co najmniej jedną instrukcję warunku.

Klauzula Default jest wyzwalana, gdy wartość nie jest zgodna z żadnym z warunków. Jest ona równoważna klauzuli Else 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 z symbolami wieloznacznymi.
Jeśli klauzula match nie jest ciągiem, parametr ma wartość
Ignorowane.
Dokładny Wskazuje, że klauzula match, jeśli jest ciągiem, musi
Dokładnie pasuj. Jeśli klauzula match nie jest ciągiem, ten parametr
jest ignorowany.
CaseSensitive Wykonuje dopasowanie z uwzględnieniem wielkości liter. Jeśli klauzula meczowa nie jest
ciągu, ten parametr jest ignorowany.
Plik Pobiera dane wejściowe z pliku, a nie z instrukcji wartości. Jeśli
Uwzględnionych jest wiele parametrów pliku, tylko ostatni z nich to
używany. Każdy wiersz pliku jest odczytywany i oceniany przez
Switch wypowiedź.
Wyrażenie regularne Wykonuje dopasowanie wartości wyrażenia regularnego do
warunek. Jeśli
match nie jest ciągiem, ten parametr jest ignorowany.

Uwaga / Notatka

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żyty 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 słowo "czternaście" odpowiadało wielkości liter, należy użyć parametru -Wildcard lub -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 instrukcji Switch może być jednym z następujących elementów:

  • 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 jest 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 skryptu 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, wykonywana jest akcja dla każdego warunku. Aby zmienić to zachowanie, użyj Break słów kluczowych lub Continue .

Słowo Break kluczowe zatrzymuje przetwarzanie i zamyka instrukcję Switch .

Słowo Continue kluczowe zatrzymuje przetwarzanie bieżącej wartości, ale kontynuuje przetwarzanie wszystkich kolejnych wartości.

Poniższy przykład przetwarza tablicę liczb i wyświetla, czy są dziwne, czy nawet. Liczby ujemne są pomijane za pomocą słowa kluczowego Continue . Jeśli napotkano nieliczebną liczbę, wykonanie zostanie zakończone za pomocą słowa kluczowego Break .

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

ZOBACZ TEŻ

o_Przerwaniu

o_Kontynuuj

about_If

o_Blokach_Skryptów