Introductie van S heks geval in PowerShell

Schakelfunctie in PowerShell wordt gebruikt om meerdere If-instructies af te handelen of, anders gezegd, als vervanging van meerdere voorwaarden If / Else If / Else. Als u een enkele voorwaarde in Script of Functie wilt controleren, kunt u de instructie If / else gebruiken, maar als u meer IF-instructies wilt evalueren, gebruikt u Switch.

Schakelaar is beter te vergelijken met meerdere If-instructies en eenvoudig te implementeren en eenvoudig te gebruiken voor codering. Er zijn meerdere voorwaarden onder elke verklaring en wanneer een ervan voldoet, wordt de actie uitgevoerd.

Syntaxis:

Switch ()
(
(Action1)
(Action2)
)

Volledige syntaxis:

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

OF

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

Parameters van Switch Case in PowerShell

  • Regex : het wordt ook reguliere expressie genoemd. Voert de reguliere expressiecontrole uit ten opzichte van de waarde van de voorwaarde. Als u Regex gebruikt, worden WildCard en Exacts genegeerd. Als de overeenkomstclausule geen string is, wordt deze parameter ook genegeerd.
  • Wildcard : geeft aan dat de voorwaarde een jokertekenreeks is. Als u Wildcard gebruikt, worden Regex en Exacts genegeerd. Als de overeenkomstclausule geen string is, wordt deze parameter ook genegeerd.
  • Exact : voert de match uit tegen de exacte string. Als u Exact gebruikt, worden Wildcard en Regex genegeerd en als de matchclausule geen string is, wordt deze parameter genegeerd.
  • CaseSensitive: deze parameter controleert de voorwaarde die exact overeenkomt met de doorgegeven waarde (hoofdlettergevoelig) als deze niet overeenkomt, dan wordt deze parameter genegeerd. Het heeft ook een stringwaarde nodig.
  • Bestand : neemt het bestandspad als een invoerwaarde in plaats van een tekenreekswaarde. Als er meerdere bestandsparameters worden doorgegeven, is alleen de laatste nodig. Elke regel van het bestand wordt gelezen en geëvalueerd op basis van de voorwaarde en als de voorwaarde overeenkomt, wordt die waarde uitgevoerd of wordt een geschreven bericht weergegeven.

flowchart

Hoe werkt switch in PowerShell?

Zoals hierboven in het diagram wordt weergegeven, begint elke keer dat een waarde (tekenreeks, geheel getal, float of andere gegevenstypen), array, jokertekens, bestanden, enz. Wordt doorgegeven, de voorwaarden één voor één overeen te komen en wanneer de voorwaarde overeenkomt, voert het script dat blok uit . Voor meerdere overeenkomende waarden, wordt meerdere scrips-blokken uitgevoerd en als er geen overeenkomende waarde wordt gevonden en als de standaardvoorwaarde is opgegeven, wordt dat blok uitgevoerd, anders is er nuluitvoer.

Voorbeelden van Switch Case in PowerShell

Laten we het gegeven voorbeeld bekijken:

Voorbeeld 1

1. Eenvoudige schakelfunctie met string, geheel getal doorgegeven.

Code:

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

Uitgang: drie

Code:

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

Uitgang: gegevens uitgevoerd

Wat nu als de parameter niet overeenkomt met de uitdrukking. Als een hieronder gegeven voorbeeld komt 5 niet overeen met een van de Switch-cases. In dit geval is de uitvoer nul.

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

Om het bovenstaande probleem op te lossen, moet standaard worden opgegeven en wordt standaardblok uitgevoerd wanneer geen van de parameters overeenkomt.

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

Uitgang: Geen overeenkomst gevonden

Voorbeeld 2

Laten we het gegeven voorbeeld bekijken:

Verschil tussen if / else if / else en Switch. Uit het onderstaande voorbeeld kunt u begrijpen hoe het eenvoudig is om een ​​script te schrijven met de Switch-functie.

$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: het is 3 uur

Uitvoeringstijd voor 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")
)

Totaal milliseconden: 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")
)
)

Totaal milliseconden: 25.6802

Verschil: 13, 4614 milliseconden

Dit verschil wordt enorm wanneer u massale scripts of functies in de schakelaar schrijft.

1. Schakelaar met Regex-parameter

Als Regex wordt vermeld in de schakelaar, evalueert het de uitdrukking met de doorgegeven waarde en als een deel van de voorwaarde overeenkomt, voert het die bewerking uit.

Overweeg het onderstaande voorbeeld.

Code:

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

Output: er wordt niets vermeld

Na het toevoegen van 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")
)

Output : Donkey is vermeld

Ezel wordt weer genoemd

2. Schakel met Wildcard-parameter

Wildcard werkt vergelijkbaar met de parameter Like.

Code:

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

Uitgang: WMI-fout

3. Schakelaar met exacte parameter

Exacte functie is standaard in Switch. Het maakt niet uit of je het gebruikt of niet. Maar als u twee parameters tegelijkertijd gebruikt, heeft de laatste parameter voorrang.

Code:

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

Output: Geen wereld

Code:

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

Output: Hallo wereld

4. Schakel met Bestandsparameter

U kunt als parameter een bestandspad rechtstreeks naar de schakelaar opgeven. U kunt Bestand gebruiken met een pad naar een bestand in plaats van het een variabele uitdrukking te geven.

Code:

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

Output:

U kunt $ PSItem of $ _ gebruiken om met huidige items te werken.

5. Schakelaar met CaseSensitive-parameter

Wanneer u een hoofdlettergevoelige parameter in een schakelaar gebruikt, moet de voorwaarde exact overeenkomen met elk teken.

Code:

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

Output: dit komt niet overeen

6. Doorgeven van arraywaarde om van functie te wisselen

Simple Array:

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

Output:

Tien

Twaalf

Array-object passeren

Code:

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

Output:

VM-verwijderingsbewerking

VM Create-bewerking

7. Pauzetoestand

Wanneer u onderbrekingsvoorwaarde opgeeft, wordt de bewerking onderbroken in die lus en kan de verdere uitvoering niet worden voortgezet. Dit is vrij handig als u geen verdere stappen wilt controleren wanneer de voorwaarde voldoet en de uitvoeringstijd sneller wordt.

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

Output:

VM-verwijderingsbewerking

Als u opmerkt, wordt er slechts één blok uitgevoerd en verlaat het de schakelfunctie.

8. Doorgaan voorwaarde

De parameter Doorgaan wordt gebruikt om de specifieke iteratie over te slaan. Als er bijvoorbeeld 3 overeenkomende items zijn, wordt deze eerst uitgevoerd en wanneer de voorwaarde overeenkomt, worden andere stappen overgeslagen en naar de volgende stap overgegaan.

Code:

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

Uitgang: eerste blok wordt uitgevoerd

Zoals je ziet, wordt er slechts één argument doorgegeven ('Hallo'), het voert het eerste blok alleen uit omdat de uitdrukking overeenkomt en er geen ander argument meer is om uit te voeren, het script eindigt.

  • Nog een gemengd voorbeeld van pauze en ga verder met Switch.

Code:

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

Output:

Eerste blok wordt uitgevoerd

Tweede blok wordt uitgevoerd

Conclusie

Al met al is Switch veel beter dan het implementeren van meerdere If-voorwaarden en biedt het meer functionaliteit en verkorting van de uitvoeringstijd.

Aanbevolen artikelen

Dit is een handleiding voor Switch Case in PowerShell geweest. Hier bespreken we ook de syntaxis, parameters en voorbeelden van schakelprocedures in Powershell. U kunt ook een kijkje nemen in de volgende artikelen voor meer informatie-

  1. Wat is Shell Scripting?
  2. PowerShell-opdrachten
  3. PowerShell-operators
  4. Gebruik van Powershell
  5. Handleiding voor array in PowerShell met voorbeelden

Categorie: