Freigeben über


Über Switch

KURZE BESCHREIBUNG

Erläutert, wie ein Schalter verwendet wird, um mehrere If-Anweisungen zu verarbeiten.

LANGE BESCHREIBUNG

Verwenden Sie eine If-Anweisung, um eine Bedingung in einem Skript oder einer 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 zum Überprüfen mehrerer Bedingungen eine Switch-Anweisung. Die Switch Anweisung entspricht einer Reihe von If-Anweisungen, ist jedoch einfacher. Die Switch-Anweisung listet jede Bedingung und eine optionale Aktion auf. Wenn eine Bedingung erfüllt ist, wird die Aktion ausgeführt.

Die Switch Anweisung verwendet auch die $switch Variable automatic. Weitere Informationen finden Sie unter about_Automatic_Variables.

Eine grundlegende Switch Anweisung weist das folgende Format auf:

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

Die folgende Switch Anweisung vergleicht z. B. den Testwert 3 mit den einzelnen Bedingungen. Wenn der Testwert der Bedingung entspricht, 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 für den Wert 3 eine Übereinstimmung vorhanden ist. Die folgende Switch-Anweisung hat zwei Bedingungen für einen Wert von 3. Es zeigt, 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 die Switch-Anweisung, um den Vergleich nach einer Übereinstimmung zu beenden, um Break den Vergleich 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 er 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 wird eine genaue Übereinstimmung des Werts ohne Berücksichtigung der Groß-/Kleinschreibung durchgeführt. Wenn es sich bei dem Wert um eine Auflistung handelt, wird jedes Element in der Reihenfolge ausgewertet, in der er angezeigt wird.

Die Switch Anweisung muss mindestens eine Bedingungsanweisung enthalten.

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

Switch hat die folgenden Parameter:

Parameter BESCHREIBUNG
Platzhalter Gibt an, dass es sich bei der Bedingung um eine Platzhalterzeichenfolge handelt.
Wenn die match-Klausel keine Zeichenfolge ist, lautet der Parameter
ignoriert.
Genau Gibt an, dass die match-Klausel, wenn es sich um eine Zeichenfolge handelt,
genau übereinstimmen. Wenn es sich bei der match-Klausel nicht um eine Zeichenfolge handelt, wird dieser Parameter
wird ignoriert.
Führt eine Übereinstimmung unter Berücksichtigung der Groß-/Kleinschreibung durch. Wenn die match-Klausel nicht
eine Zeichenfolge, wird dieser Parameter ignoriert.
Datei Nimmt Eingaben aus einer Datei anstelle einer Wertanweisung entgegen. Wenn
mehrere Dateiparameter sind enthalten, nur der letzte ist
gebraucht. Jede Zeile der Datei wird von der
Switch Aussage.
Regex- Führt einen Abgleich des Werts mit dem regulären Ausdruck
Zustand. Wenn die Option
match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.

Hinweis

Beim Angeben von widersprüchlichen Werten wie Regex und Wildcard hat der letzte angegebene Parameter Vorrang, und alle widersprüchlichen Parameter werden ignoriert. Es sind auch mehrere Instanzen von Parametern zulässig. Allerdings ist nur der letzte verwendete Parameter wirksam.

In diesem Beispiel gibt es keinen übereinstimmenden Fall, sodass keine Ausgabe vorhanden ist.

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" mit einem Fall übereinstimmt, müssen Sie den parameter -Wildcard 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 = '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

Eine Switch Anweisungsbedingung kann wie folgt lauten:

  • Ein Ausdruck, dessen Wert mit dem Eingabewert verglichen wird
  • Ein Skriptblock, der zurückgegeben $true werden soll, wenn eine Bedingung erfüllt ist. Der Skriptblock erhält das aktuelle zu vergleichende Objekt in der $_ automatischen Variablen und wird in seinem eigenen Gültigkeitsbereich ausgewertet.

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 executes as well

Wenn der Wert mehreren Bedingungen entspricht, wird die Aktion für jede Bedingung ausgeführt. Verwenden Sie die Break Schlüsselwörter, Continue um dieses Verhalten zu ändern.

Das Break Schlüsselwort beendet die Verarbeitung und beendet die Switch Anweisung.

Das Continue Schlüsselwort beendet die Verarbeitung des aktuellen Werts, verarbeitet aber alle nachfolgenden Werte weiter.

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 übersprungen. Wenn keine Zahl auftritt, wird die Ausführung mit dem Break Schlüsselwort 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

SIEHE AUCH

about_Break

about_Continue

about_If

about_Script_Blocks