Share via


Informationen zu Switch

Kurze Beschreibung

Erläutert, wie Sie einen Switch verwenden, um mehrere If Anweisungen zu behandeln.

Lange Beschreibung

Verwenden Sie eine -Anweisung, um eine Bedingung in einem Skript oder einer If Funktion zu überprüfen. Die If -Anweisung kann viele Arten von Bedingungen überprüfen, einschließlich des Werts von Variablen und der Eigenschaften von Objekten.

Verwenden Sie eine Switch Anweisung, um mehrere Bedingungen zu überprüfen. Die Switch -Anweisung entspricht einer Reihe von If Anweisungen, ist aber einfacher. Die Switch Anweisung listet jede Bedingung und eine optionale Aktion auf. Wenn eine Bedingung abgerufen wird, wird die Aktion ausgeführt.

Die Switch -Anweisung kann die automatischen $_ Variablen und $switch verwenden. Weitere Informationen finden Sie unter about_Automatic_Variables.

Eine basic-Anweisung Switch hat das folgende Format:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Die folgende Switch Anweisung vergleicht beispielsweise den Testwert 3 mit den einzelnen Bedingungen. Wenn der Testwert mit der Bedingung übereinstimmt, wird die Aktion ausgeführt.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

In diesem einfachen Beispiel wird der Wert mit jeder Bedingung in der Liste verglichen, obwohl es eine Übereinstimmung für den Wert 3 gibt. Die folgende Switch Anweisung weist zwei Bedingungen für einen Wert von 3 auf. Es wird veranschaulicht, dass standardmäßig alle Bedingungen getestet werden.

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.

Verwenden Sie Break die -Anweisung, um den Switch Vergleich nach einer Übereinstimmung zu beenden. Die Break -Anweisung beendet die Switch -Anweisung.

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.

Wenn der Testwert eine Auflistung ist, z. B. ein Array, wird jedes Element in der Auflistung in der Reihenfolge ausgewertet, in der es angezeigt wird. In den folgenden Beispielen werden 4 und dann 2 ausgewertet.

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.

Alle Break Anweisungen gelten für die Auflistung, nicht für jeden Wert, wie im folgenden Beispiel gezeigt. Die Switch -Anweisung wird durch die Break -Anweisung in der Bedingung von Wert 4 beendet.

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.

Syntax

Die vollständige Switch Anweisungssyntax lautet wie folgt:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

oder

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Wenn keine Parameter verwendet werden, Switch verhält sich dasselbe wie die Verwendung des Parameters Exact . Es führt eine Übereinstimmung zwischen Groß- und Kleinschreibung für den Wert aus. Wenn der Wert eine Auflistung ist, wird jedes Element in der Reihenfolge ausgewertet, in der es angezeigt wird.

Die Switch Anweisung muss mindestens eine Bedingungsanweisung enthalten.

Die Default -Klausel wird ausgelöst, wenn der Wert keiner der Bedingungen entspricht. Sie entspricht einer Else Klausel in einer If Anweisung. In jeder Switch Anweisung ist nur eine Default Klausel zulässig.

Switch verfügt über die folgenden Parameter:

  • Feldhalter : Gibt an, dass es sich bei der Bedingung um eine Feldhalterzeichenfolge handelt. Wenn die Match-Klausel keine Zeichenfolge ist, wird der Parameter ignoriert. Bei dem Vergleich wird Groß- und Kleinschreibung nicht unterschieden.
  • Genau : Gibt an, dass die Übereinstimmungsklausel genau übereinstimmen muss, wenn es sich um eine Zeichenfolge handelt. Wenn die Match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. Bei dem Vergleich wird Groß- und Kleinschreibung nicht unterschieden.
  • Groß-/Kleinschreibung: Führt eine Übereinstimmung zwischen Groß- und Kleinschreibung aus. Wenn die Match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
  • Datei: Übernimmt eingaben aus einer Datei und nicht aus einer value-Anweisung. Wenn mehrere Dateiparameter enthalten sind, wird nur der letzte Parameter verwendet. Jede Zeile der Datei wird von der Switch -Anweisung gelesen und ausgewertet. Bei dem Vergleich wird Groß- und Kleinschreibung nicht unterschieden.
  • Regex : Führt einen regulären Ausdrucksabgleich des Werts mit der Bedingung durch. Wenn die Match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. Bei dem Vergleich wird Groß- und Kleinschreibung nicht unterschieden. Die $matches automatische Variable ist für die Verwendung innerhalb des übereinstimmenden Anweisungsblocks verfügbar.

Hinweis

Beim Angeben von in Konflikt stehenden Werten wie Regex und Wildcard hat der zuletzt angegebene Parameter Vorrang, und alle in Konflikt stehenden Parameter werden ignoriert. Mehrere Instanzen von Parametern sind ebenfalls zulässig. Allerdings ist nur der zuletzt verwendete Parameter wirksam.

In diesem Beispiel wird ein Objekt, bei dem es sich nicht um eine Zeichenfolge oder numerische Daten handelt, an das Switchübergeben. Führt Switch eine Zeichenfolgenkoerziation für das Objekt aus und wertet das Ergebnis aus.

$test = @{
    Test  = 'test'
    Test2 = 'test2'
}

$test.ToString()

switch -Exact ($test)
{
    'System.Collections.Hashtable'
    {
        'Hashtable string coercion'
    }
    'test'
    {
        'Hashtable value'
    }
}
System.Collections.Hashtable
Hashtable string coercion

In diesem Beispiel gibt es keine übereinstimmende Groß- und Kleinschreibung, sodass es keine Ausgabe gibt.

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."}
}

Durch Hinzufügen der Default -Klausel können Sie eine Aktion ausführen, wenn keine anderen Bedingungen erfolgreich sind.

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

Damit das Wort "vierzehn" einem Fall entspricht, müssen Sie den -Wildcard -Parameter oder -Regex verwenden.

   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.

Im folgenden Beispiel wird der -Regex -Parameter verwendet.

$target = 'https://bing.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 that uses $($matches[1])"; Break }
}
https://bing.com is a web address that uses https

Eine Switch-Anweisungsbedingung kann wie folgt sein:

  • Ein Ausdruck, dessen Wert mit dem Eingabewert verglichen wird
  • Ein Skriptblock, der zurückgegeben $true werden soll, wenn eine Bedingung erfüllt ist.

Die $_ automatische Variable enthält den wert, der an die switch-Anweisung übergeben wurde und steht für die Auswertung und Verwendung innerhalb des Bereichs der Bedingungsanweisungen zur Verfügung.

Die Aktion für jede Bedingung ist unabhängig von den Aktionen in anderen Bedingungen.

Im folgenden Beispiel wird die Verwendung von Skriptblöcken als Switch Anweisungsbedingungen veranschaulicht.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This $_ executes as well"
    }
}
Found a string
This Test executes as well

Wenn der Wert mit mehreren Bedingungen übereinstimmt, wird die Aktion für jede Bedingung ausgeführt. Um dieses Verhalten zu ändern, verwenden Sie die Break Schlüsselwörter oder Continue .

Die Break Schlüsselwort (keyword) beendet die Verarbeitung und beendet die Switch Anweisung.

Die Continue Schlüsselwort (keyword) die Verarbeitung des aktuellen Werts beendet, aber die Verarbeitung aller nachfolgenden Werte fortgesetzt.

Im folgenden Beispiel wird ein Array von Zahlen verarbeitet und angezeigt, ob sie ungerade oder gerade sind. Negative Zahlen werden mit dem Continue Schlüsselwort (keyword) übersprungen. Wenn eine Nichtnummer gefunden wird, wird die Ausführung mit dem Break Schlüsselwort (keyword) beendet.

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

Weitere Informationen

about_Break

about_Continue

about_If

about_Script_Blocks