Einführung in den Hexenkoffer in PowerShell

Die Switch-Funktion in PowerShell wird verwendet, um mehrere If-Anweisungen zu verarbeiten, oder in anderen Begriffen, um mehrere Bedingungen If / Else If / Else zu ersetzen. Um eine einzelne Bedingung in Script oder Function zu überprüfen, können Sie die If / else-Anweisung verwenden. Wenn Sie jedoch mehr IF-Anweisungen auswerten möchten, verwenden Sie Switch.

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. Wenn eine dieser Bedingungen erfüllt ist, wird die Aktion ausgeführt.

Syntax:

Switch ()
(
(Action1)
(Action2)
)

Volle Syntax:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

ODER

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Parameter des Schaltergehäuses in PowerShell

  • Regex : Es wird auch als regulärer Ausdruck bezeichnet. Führt die Prüfung des regulären Ausdrucks anhand des Werts der Bedingung durch. Wenn Sie Regex verwenden, werden WildCard und Exacts ignoriert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
  • Platzhalter : Gibt an, dass es sich bei der Bedingung um eine Platzhalterzeichenfolge handelt. Wenn Sie Platzhalter, Regex und Exakte verwenden, werden diese ignoriert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
  • Exakt : Führt den Abgleich mit der exakten Zeichenfolge durch. Wenn Sie Exact verwenden, werden Wildcard und Regex ignoriert. Wenn die Match-Klausel keine Zeichenfolge ist, wird dieser Parameter ignoriert.
  • Groß- und Kleinschreibung beachten: Dieser Parameter überprüft die Bedingung, die genau mit dem übergebenen Wert übereinstimmt (Groß- und Kleinschreibung beachten ). Wenn die Bedingung nicht übereinstimmt, wird dieser Parameter ignoriert. Es benötigt auch einen String-Wert.
  • Datei : Nimmt den Dateipfad als Eingabewert und nicht als Zeichenfolgenwert. Wenn mehrere Dateiparameter übergeben werden, wird nur der letzte verwendet. Jede Zeile der Datei wird gelesen und gegen die Bedingung ausgewertet. Wenn die Bedingung zutrifft, führt sie diesen Wert aus oder zeigt eine schriftliche Nachricht an.

Flussdiagramm

Wie funktioniert der Switch in PowerShell?

Wie oben im Diagramm gezeigt, startet das Skript bei jeder Übergabe von Werten (Zeichenfolge, Ganzzahl, Gleitkommazahl oder anderen Datentypen), Arrays, Platzhaltern, Dateien usw. den Abgleich der Bedingungen nacheinander. Wenn die Bedingungen übereinstimmen, führt das Skript diesen Block aus . Bei mehreren übereinstimmenden Werten wird ein Block mit mehreren Scripten ausgeführt. Wenn kein übereinstimmender Wert gefunden wird und die Standardbedingung angegeben ist, wird dieser Block ausgeführt, andernfalls erfolgt keine Ausgabe.

Beispiele für Switch Cases in PowerShell

Sehen wir uns das gegebene Beispiel an:

Beispiel 1

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

Code:

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

Ausgang: Drei

Code:

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

Ausgabe: Daten ausgeführt

Was ist nun, wenn der Parameter nicht mit dem Ausdruck übereinstimmt? Im folgenden Beispiel stimmt 5 nicht mit einem der Switch-Fälle überein. In diesem Fall ist die Ausgabe null.

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

Um das obige Problem zu lösen, muss default angegeben werden und der Standardblock wird ausgeführt, wenn keiner der Parameter übereinstimmt.

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

Ausgabe: Keine Übereinstimmung gefunden

Beispiel # 2

Sehen wir uns das gegebene Beispiel an:

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

$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")
)

Ausgabe: Es ist 3 Uhr

Ausführungszeit für beide Methoden.

$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")
)

Millisekunden gesamt: 39, 1416

$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: 25.6802

Differenz: 13, 4614 Millisekunden

Dieser Unterschied wird erheblich, wenn Sie umfangreiche Skripts oder Funktionen in den Switch schreiben.

1. Wechseln Sie mit dem Regex-Parameter

Wenn Regex in switch erwähnt wird, wertet es den Ausdruck mit dem übergebenen Wert aus, und wenn ein Teil der Bedingung zutrifft, 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: Es wird nichts erwähnt

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 : Esel wird erwähnt

Esel wird wieder erwähnt

2. Wechseln Sie mit Wildcard Parameter

Wildcard funktioniert ähnlich wie der Like-Parameter.

Code:

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

Ausgabe: WMI-Fehler

3. Wechseln Sie mit Exact Parameter

Die genaue Funktion ist in Switch voreingestellt. Es spielt keine Rolle, ob Sie es verwenden oder nicht. Wenn Sie jedoch zwei Parameter gleichzeitig verwenden, hat der letzte Vorrang.

Code:

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

Ausgabe: Keine Welt

Code:

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

Ausgabe: Hallo Welt

4. Wechseln Sie mit File Parameter

Sie können einen Dateipfad direkt zum Switch als Parameter angeben. Sie können File mit einem Pfad zu einer Datei verwenden, anstatt ihr einen variablen Ausdruck 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. Wechseln Sie mit dem Parameter CaseSensitive

Wenn Sie einen Parameter für die Groß- / Kleinschreibung in einem Schalter 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: Dies ist kein Matching

6. Übergabe des Array-Werts an die Switch-Funktion

Einfaches Array:

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

Ausgabe:

Zehn

Zwölf

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:

VM-Löschvorgang

VM-Erstellungsvorgang

7. Zustand abbrechen

Wenn Sie eine Unterbrechungsbedingung angeben, wird die Operation in dieser Schleife unterbrochen und kann nicht weiter ausgeführt werden. 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:

VM-Löschvorgang

Wenn Sie feststellen, dass nur ein Block ausgeführt wird, wird die Switch-Funktion beendet.

8. Zustand fortsetzen

Der Parameter Continue wird verwendet, um die jeweilige Iteration zu überspringen. Wenn beispielsweise 3 Elemente übereinstimmen, wird diese zuerst ausgeführt. Wenn die Bedingung zutrifft, 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: Erster Satz wird ausgeführt

Wie Sie sehen, wurde 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. Das Skript wird beendet.

  • Noch ein gemischtes Beispiel für Pause und weiter mit Switch.

Code:

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

Ausgabe:

Erster Block wird ausgeführt

Zweiter Block wird ausgeführt

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 ein Leitfaden für Switch Case in PowerShell. Hier diskutieren wir auch die Syntax, Parameter und Beispiele für den Switch-Fall in Powershell. Sie können sich auch die folgenden Artikel ansehen, 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

Kategorie: