Switch-Gehäuse 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
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:
Code:
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
Ausgabe:
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:
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:
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 :
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:
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:
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:
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:
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:
Code:
Switch -Exact -Regex ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}
Ausgabe:
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:
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:
6. Array-Wert an Switch-Funktion übergeben
Einfaches Array:
switch (10,12) {
9 { "Nine" }
10 { "Ten" }
11 {"Eleven"}
12 {"Twelve"}
Default {"None"}
}
Ausgabe:
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:
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:
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:
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:
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 –
- Was ist Shell Scripting?
- PowerShell-Befehle
- PowerShell-Operatoren
- Verwendung von Powershell
- Anleitung zum Array in PowerShell mit Beispielen
- Beispiele für Regex in PowerShell
- Vollständige Anleitung zur Funktion im Shell-Scripting
- Lerne das Echo im Shell-Scripting
- Beispiele für Switch Case im Shell-Scripting
- Python Switch Case / Wie implementiere ich?
Leave a Reply