about_Switch
Kurze Beschreibung
Erläutert die Verwendung eines Schalters zum Behandeln mehrerer if
Anweisungen.
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 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 erhalten wird, wird die Aktion ausgeführt.
Die switch
Anweisung kann die $_
und $switch
die automatischen Variablen verwenden. Weitere Informationen finden Sie unter about_Automatic_Variables.
Syntax
Eine grundlegende switch
Anweisung weist das folgende Format auf:
Switch (<test-expression>)
{
<result1-to-be-matched> {<action>}
<result2-to-be-matched> {<action>}
}
Die entsprechenden if
Anweisungen sind:
if (<result1-to-be-matched> -eq (<test-expression>)) {<action>}
if (<result2-to-be-matched> -eq (<test-expression>)) {<action>}
Der <test-expression>
einzelne Ausdruck wird im Ausdrucksmodus ausgewertet, um einen Wert zurückzugeben.
Dies <result-to-be-matched>
ist ein Ausdruck, dessen Wert mit dem Eingabewert verglichen wird. Ausdrücke umfassen Literalwerte (Zeichenfolgen oder Zahlen), Variablen und Skriptblocks, die einen booleschen Wert zurückgeben.
Ein nicht angestellter Wert, der nicht als Zahl erkannt wird, wird als Zeichenfolge behandelt.
Um Verwirrung oder unbeabsichtigte Zeichenfolgenkonvertierung zu vermeiden, sollten Sie immer Zeichenfolgenwerte anführungszeichen. Schließen Sie alle Ausdrücke in Klammern ()
ein, erstellen Sie Unterausdrücke, um sicherzustellen, dass der Ausdruck korrekt ausgewertet wird.
Es ist wichtig zu verstehen, dass sich der <result-to-be-matched>
Wert auf der linken Seite des Vergleichsausdrucks befindet. Das bedeutet, dass sich das <test-expression>
Ergebnis auf der rechten Seite befindet, das zum Vergleich in den Typ des linksseitigen Werts konvertiert werden kann. Weitere Informationen finden Sie unter about_Comparison_Operators
Der Wert default
ist für die Aktion reserviert, die verwendet wird, wenn keine anderen Übereinstimmungen vorhanden sind.
Die $_
automatische Variable enthält den Wert des Ausdrucks, der an die switch
Anweisung übergeben wird, und steht für die Auswertung und Verwendung im Bereich der <result-to-be-matched>
Anweisungen zur Verfügung.
Die vollständige switch
Anweisungssyntax lautet wie folgt:
switch [-regex | -wildcard | -exact] [-casesensitive] (<test-expression>)
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
oder
switch [-regex | -wildcard | -exact] [-casesensitive] -file filename
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
Wenn keine Parameter verwendet werden, switch
verhält sich dasselbe wie die Verwendung des Exact-Parameters . Es führt eine Übereinstimmung zwischen Groß-/Kleinschreibung für den Wert durch. 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. Sie entspricht einer else
Klausel in einer if
Anweisung. In jeder switch
Anweisung ist nur eine default
Klausel zulässig.
switch
hat die folgenden Parameter:
- Wild Karte – Gibt an, dass die Bedingung eine wild Karte Zeichenfolge ist. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird der Parameter ignoriert. Bei dem Vergleich wird Groß- und Kleinschreibung nicht unterschieden.
- Genau – Gibt an, dass die Übereinstimmungsklausel, wenn es sich um eine Zeichenfolge handelt, exakt übereinstimmen muss. Wenn die Übereinstimmungsklausel 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 durch. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
- Datei: Verwendet Eingaben aus einer Datei anstelle eines
<test-expression>
. Wenn mehrere Dateiparameter enthalten sind, wird nur der letzte Parameter verwendet. Jede Zeile der Datei wird von derswitch
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 aus. Wenn die Übereinstimmungsklausel 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 widersprüchlichen Werten wie Regex und Wild Karte hat der letzte angegebene Parameter Vorrang, und alle widersprüchlichen Parameter werden ignoriert. Es sind auch mehrere Instanzen von Parametern zulässig. Es wird jedoch nur der letzte aufgeführte Parameter verwendet.
Beispiele
Im folgenden Beispiel vergleicht die switch
Anweisung 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 break
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 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.
In diesem Beispiel wird die switch
Anweisung auf den Typ des Werts in der Hashtabelle getestet. Sie müssen einen booleschen Wert verwenden und ausdrucken, um den auszuführenden Scriptblock auszuwählen.
$var = @{A = 10; B = 'abc'}
foreach ($key in $var.Keys) {
switch ($var[$key].GetType()) {
{ $_ -eq [int32] } { "$key + 10 = $($var[$key] + 10)" }
{ $_ -eq [string] } { "$key = $($var[$key])" }
}
}
A + 10 = 20
B = abc
In diesem Beispiel wird ein Objekt, das keine Zeichenfolge oder numerische Daten ist, an die switch
übergeben. Die switch
Führt eine Zeichenfolgenkoersion 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 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 -Wildcard
Oder-Parameter -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
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
Im folgenden Beispiel wird ein Array verarbeitet, das zwei Datumswerte enthält. Die <value-scriptblock>
Eigenschaft "Year" jedes Datums wird verglichen. Die <action-scriptblock>
Anzeige zeigt eine Willkommensnachricht oder die Anzahl der Tage bis zum Anfang des Jahres 2022 an.
switch ((Get-Date 1-Jan-2022), (Get-Date 25-Dec-2021)) {
{ $_.Year -eq 2021 } {
$days = ((Get-Date 1/1/2022) - $_).days
"There are $days days until 2022."
}
{ $_.Year -eq 2022 } { 'Welcome to 2022!' }
}
Wenn der Wert mehreren Bedingungen entspricht, wird die Aktion für jede Bedingung ausgeführt. Um dieses Verhalten zu ändern, verwenden Sie die break
oder continue
Schlüsselwort (keyword).
Die break
Schlüsselwort (keyword) beendet die Verarbeitung und beendet die switch
Anweisung.
Die continue
Schlüsselwort (keyword) beendet die Verarbeitung des aktuellen Werts, verarbeitet jedoch alle nachfolgenden Werte.
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 auftritt, 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für