Articles

Switch-Gehäuse in PowerShell

Switch-Gehäuse in PowerShell

Switch Case in PowerShell

Einführung in Switch Case in PowerShell

Die Switch-Funktion in PowerShell wird verwendet, um mehrere If-Anweisungen zu verarbeiten, oder mit anderen Worten, sie ersetzt mehrere Bedingungen If/Else If/Else . Um eine einzelne Bedingung in einem Skript oder einer Funktion zu überprüfen, können Sie die If / else-Anweisung verwenden.

Switch ist besser im Vergleich zu mehreren If-Anweisungen und einfach zu implementieren und einfach für die Codierung zu verwenden. Jede Anweisung enthält mehrere Bedingungen, und wenn eine davon erfüllt ist, wird die Aktion ausgeführt.

Starten Sie Ihren kostenlosen Data Science-Kurs

Hadoop, Data Science, Statistik & andere

Syntax:

Switch (<Value>)
{
<Condition1> {Action1}
<Condition2> {Action2}
}

Vollständige Syntax:

Switch ( <value> ) {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}

ODER

Switch -file {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}

Parameter des Switch-Gehäuses in der PowerShell

  • Regex: Es wird auch regulärer Ausdruck genannt. Führt die Prüfung des regulären Ausdrucks anhand des Werts der Bedingung durch. Wenn Sie Regex verwenden, werden Platzhalter und Exakte ignoriert. Wenn die match-Klausel kein String ist, wird dieser Parameter ignoriert.
  • Platzhalter: Gibt an, dass die Bedingung eine Platzhalterzeichenfolge ist. Wenn Sie Platzhalter verwenden, werden Regex und Exacts ignoriert. Wenn die match-Klausel kein String ist, wird dieser Parameter ignoriert.
  • Exact: Führt die Übereinstimmung mit der exakten Zeichenfolge durch. Wenn Sie Exact verwenden, werden Platzhalter und Regex ignoriert, und wenn die match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
  • CaseSensitive: Dieser Parameter überprüft die Bedingung, die genau mit dem übergebenen Wert übereinstimmt (Groß-/Kleinschreibung beachten). Es braucht auch einen String-Wert.
  • File: Verwendet den Dateipfad als Eingabewert und nicht als Zeichenfolgenwert. Wenn mehrere Dateiparameter übergeben werden, wird nur der letzte benötigt. Jede Zeile der Datei wird gelesen und anhand der Bedingung ausgewertet, und wenn die Bedingung übereinstimmt, wird dieser Wert ausgeführt oder eine schriftliche Nachricht angezeigt.

Flussdiagramm

Flussdiagramm

Flussdiagramm

Wie funktioniert Switch in PowerShell?

Wie oben im Diagramm gezeigt, wann immer ein Wert (String, Integer, Float oder andere Datentypen), Array, Platzhalter, Dateien usw. wird übergeben, dann werden die Bedingungen nacheinander abgeglichen, und wenn die Bedingung übereinstimmt, führt das Skript diesen Block aus. Wenn kein übereinstimmender Wert gefunden wurde und die Standardbedingung angegeben ist, wird dieser Block ausgeführt, andernfalls wird null ausgegeben.

Beispiele für den Switch-Fall in PowerShell

Sehen wir uns das angegebene Beispiel an:

Beispiel# 1

1. Einfache Switch-Funktion mit String, Integer-Wert übergeben.

Code:

switch (3) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}

Ausgabe:

Powershell 1

Powershell 1

Code:

switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}

Ausgabe:

powershell 2

powershell 2

Was nun, wenn der Parameter nicht mit dem Ausdruck übereinstimmt. Als unten angegebenes Beispiel stimmt 5 mit keinem der Switch-Fälle überein. In diesem Fall ist die Ausgabe null.

Code:

switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}

Um das obige Problem zu beheben, muss default angegeben werden und default block wird ausgeführt, wenn keiner der Parameter übereinstimmt.

Code:

switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
default{"No Match Found"}
}

Ausgabe:

Powershell 3

Powershell 3

Beispiel# 2

wir sehen das gegebene Beispiel:

Unterschied zwischen if / else if /else und Switch. Aus dem folgenden Beispiel können Sie verstehen, wie einfach es ist, ein Skript mit der Switch-Funktion zu schreiben.

Code:

$time = 3
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}

$time = 3
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}

Output:

powershell 4

powershell 4

Execution time for both the methods.

Code:

$time = 3
Measure-Command {
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}
}

TotalMilliseconds :

TotalMilliseconds

TotalMilliseconds

Code:

$time = 3
Measure-Command {
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}
}

TotalMilliseconds:

powershell21

powershell21

Unterschied: 31,3154 Millisekunden

Dieser Unterschied wird enorm, wenn Sie massive Skripte oder Funktionen in den Switch schreiben.

1. Switch with Regex Parameter

Wenn Regex in switch erwähnt wird, wertet es den Ausdruck mit dem übergebenen Wert aus und wenn ein Teil der Bedingung übereinstimmt, führt es diese Operation aus.

Betrachten Sie das folgende Beispiel.

Code:

Switch ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}

Ausgabe:

Powershell 5

Powershell 5

Nach dem Hinzufügen von Regex.

Code:

Switch -Regex ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}

Ausgabe:

Powershell 6

Powershell 6

2. Schalter mit Wildcard-Parameter

Wildcard funktioniert ähnlich wie Like-Parameter.

Code:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) {
"Error*" {"WMI Error"}
"Warning*" {"WMI Warning"}
"Successful*" {"WMI Connection Successful"}
}

Ausgabe:

Powershell 7PNG

Powershell 7PNG

3. Schalter mit exakten Parameter

Genaue Funktion ist Standard in Schalter. Es spielt keine Rolle, ob Sie es verwenden oder nicht. Wenn Sie jedoch zwei Parameter gleichzeitig verwenden, hat der letzte Parameter Vorrang.

Code:

Switch -Regex -Exact ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}

Ausgabe:

Powershell 8PNG

Powershell 8PNG

Code:

Switch -Exact -Regex ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}

Ausgabe:

Powershell 9PNG

Powershell 9PNG

4. Schalter mit Dateiparameter

Sie können einen Dateipfad direkt zum Schalter als Parameter angeben. Sie können File mit einem Pfad zu einer Datei verwenden, anstatt ihr einen Variablenausdruck zu geben.

Code:

Switch -Wildcard -File C:\temp\switchtest.txt {
"*Warning*"{Write-Warning $PSItem}
"*Error*"{Write-Error $PSItem}
}

Ausgabe:

Schaltkasten in Powershell. 2PNG

Schaltkasten in der Powershell. 2PNG

Sie können $PSItem oder $_ verwenden, um mit aktuellen Elementen zu arbeiten.

5. Switch with CaseSensitive parameter

Wenn Sie einen Casesensitive-Parameter in einem Switch verwenden, muss die Bedingung für jedes Zeichen genau übereinstimmen.

Code:

switch -CaseSensitive ("Hello") {
"HeLlo" {"This is different HeLlo"}
Default {"This is not Matching"}
}

Ausgabe:

Powershell 10PNG

Powershell 10PNG

6. Array-Wert an Switch-Funktion übergeben

Einfaches Array:

switch (10,12) {
9 { "Nine" }
10 { "Ten" }
11 {"Eleven"}
12 {"Twelve"}
Default {"None"}
}

Ausgabe:

Array übergeben

Array übergeben

Array-Objekt übergeben

Code:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {"VM Delete Operation"}
"VM_Create" {"VM Create Operation"}
"VM_Shutdown" {"VM Shutdown Operation"}
}

Ausgabe:

Powershell 12PNG

Powershell 12PNG

7. Break condition

Wenn Sie break condition angeben, bricht die Operation in dieser Schleife ab und kann die weitere Ausführung nicht fortsetzen. Dies ist sehr hilfreich, wenn Sie keine weiteren Schritte überprüfen möchten, wenn die Bedingung erfüllt ist und die Ausführungszeit schneller wird.

Code:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {
"VM Delete Operation"
break }
"VM_Create" {
"VM Create Operation"
break}
"VM_Shutdown" {
"VM Shutdown Operation"
break
}
}

Ausgabe:

breakcondition

breakcondition

Wenn Sie bemerken, dass nur ein Block ausgeführt wird, verlässt er die Switch-Funktion.

8. Continue-Bedingung

Der Continue-Parameter wird verwendet, um die jeweilige Iteration zu überspringen. Wenn beispielsweise 3 übereinstimmende Elemente vorhanden sind, wird es zuerst ausgeführt, und wenn die Bedingung übereinstimmt, werden andere Schritte übersprungen und mit dem nächsten Schritt fortgefahren.

Code:

switch ('Hello') {
"hello" {'First Block Executes'
continue}
'HELLO' {'Second Block Executes'
continue }
'HeLLo' {'Third Block Exectues'
continue }
Default {'Nothing executed'}
}

Ausgabe:

continue condition

continue condition

Wie Sie sehen können, wird nur ein Argument übergeben (‚Hello‘), der erste Block wird nur ausgeführt, weil der Ausdruck übereinstimmt und kein anderes Argument mehr ausgeführt werden muss.

  • Ein weiteres gemischtes Beispiel für break und continue with Switch.

Code:

switch ('Alpha','Beta','Delta') {
"Alpha" {'First Block Executes'
continue}
'Beta' {'Second Block Executes'
break }
'Delta' {'This will not Execute'}
}

Ausgabe:

powershell 15PNG

powershell 15PNG

Fazit

Alles in allem ist Switch weitaus besser als die Implementierung mehrerer If-Bedingungen und bietet mehr Funktionalität und eine Verkürzung der Ausführungszeit.

Empfohlene Artikel

Dies war eine Anleitung zum Wechseln von Case in PowerShell. Hier diskutieren wir auch die Syntax, Parameter und Beispiele für Switch case in Powershell. Sie können auch einen Blick auf die folgenden Artikel werfen, um mehr zu erfahren –

  1. Was ist Shell Scripting?
  2. PowerShell-Befehle
  3. PowerShell-Operatoren
  4. Verwendung von Powershell
  5. Anleitung zum Array in PowerShell mit Beispielen
  6. Beispiele für Regex in PowerShell
  7. Vollständige Anleitung zur Funktion im Shell-Scripting
  8. Lerne das Echo im Shell-Scripting
  9. Beispiele für Switch Case im Shell-Scripting
  10. Python Switch Case / Wie implementiere ich?
3 Anteile