Udostępnij za pośrednictwem


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

ZOBACZ RÓWNIEŻ

about_Break

about_Continue

about_If

about_Script_Blocks