Introduktion till S witch Case i PowerShell

Switchfunktion i PowerShell används för att hantera flera If-uttalanden eller i andra termer ersätter det flera villkor If / Annars If / Annars. För att kontrollera ett enda villkor i Skript eller funktion kan du använda if / else-uttalande men om du vill utvärdera fler IF-uttalanden, använd Switch.

Switch är bättre att jämföra med flera If-uttalanden och lätt att implementera och enkel att använda för kodning. Det finns flera villkor under varje uttalande och när en av dem uppfyller så utförs åtgärden.

Syntax:

Switch ()
(
(Action1)
(Action2)
)

Full syntax:

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

ELLER

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

Parametrar för Switch Case i PowerShell

  • Regex : Det kallas också Regular Expression. Utför den vanliga uttryckskontrollen mot värdet på villkoret. Om du använder Regex ignoreras WildCard och Exacts. Om matchningsklausulen inte är en sträng ignoreras denna parameter.
  • Jokertecken : Indikerar att villkoret är en jokardsträng. Om du använder Wildcard ignoreras Regex och Exacts. Om matchningsklausulen inte är en sträng ignoreras denna parameter.
  • Exakt : Utför matchen mot den exakta strängen. Om du använder Exact ignoreras Wildcard och Regex och om matchningsklausulen inte är en sträng ignoreras denna parameter.
  • CaseSensitive: Denna parameter kommer att kontrollera villkoret som matchar exakt med det godkända värdet (skiftlägeskänsligt) om det inte matchar så ignoreras denna parameter. Den behöver också ett strängvärde.
  • Fil : Tar filvägen som ett inmatningsvärde snarare som ett strängvärde. Om flera filparametrar passeras tar det bara den sista. Varje rad i filen läses och utvärderas mot villkoret och om villkoret matchar, kör det det värdet eller visar ett skriftligt meddelande.

Flödesschema

Hur fungerar switch i PowerShell?

Som visas ovan i diagrammet, när valfritt värde (sträng, heltal, flottör eller andra datatyper), matris, jokertecken, filer etc. passeras börjar det matchningsvillkor en efter en och när villkor matchar, körs skriptet som blockerar . För flera matchande värden kommer flera skriptblock att exekveras och om inget matchningsvärde hittats och om standardvillkor är specificerat kör det blocket annars är det nollutmatning.

Exempel på Switch Case i PowerShell

Låt oss se det givna exemplet:

Exempel 1

1. Enkel switchfunktion med sträng, heltalsvärde passerat.

Koda:

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

Utgång: Tre

Koda:

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

Utgång: Data körs

Vad händer nu om parametern inte matchar uttrycket. Som ett exempel nedan stämmer 5 inte med något av switchfallen. I detta fall kommer utgången att vara noll.

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

För att lösa ovanstående problem måste standard specificera och standardblock exekveras när ingen av parametrarna matchar.

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

Output: Ingen matchning hittad

Exempel 2

Låt oss se det givna exemplet:

Skillnad mellan if / else if / else och Switch. I exemplet nedan kan du förstå hur det är lätt att skriva ett skript med Switch-funktionen.

$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: Det är 3 O'Clock

Exekveringstid för båda metoderna.

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

TotalMillisekunder: 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")
)
)

TotalMillisekunder: 25.6802

Skillnad: 13.4614 millisekunder

Denna skillnad blir stor när du skriver massiva skript eller funktioner inuti omkopplaren.

1. Växla med Regex-parameter

Om Regex nämns i omkopplaren utvärderar det uttrycket med godkänt värde och om en del av villkoret matchar, kör den den operationen.

Tänk på exemplet nedan.

Koda:

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

Output: Ingenting nämns

Efter att ha lagt till Regex.

Koda:

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 : Åsna nämns

Åsnan nämns igen

2. Växla med wildcard-parameter

Wildcard fungerar som Parametern Gilla.

Koda:

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

Utgång: WMI-fel

3. Växla med exakt parameter

Exakt funktion är standard i Switch. Det spelar ingen roll om du använder det eller inte. Men när du använder två parametrar samtidigt har den sista parametern företräde.

Koda:

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

Output: Ingen värld

Koda:

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

Output: Hello World

4. Växla med filparameter

Du kan tillhandahålla en filväg direkt till växeln som parameter. Du kan använda File med en sökväg till en fil istället för att ge den ett variabelt uttryck.

Koda:

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

Produktion:

Du kan använda $ PSItem eller $ _ för att arbeta med aktuella objekt.

5. Växla med CaseSensitive-parameter

När du använder en känslig parameter i en switch, måste villkoret matcha exakt med varje tecken.

Koda:

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

Output: Det här matchar inte

6. Passing Array Value för att byta funktion

Enkel array:

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

Produktion:

Tio

Tolv

Passing Array-objekt

Koda:

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

Produktion:

VM Radera operation

VM Skapa operation

7. Brottstillstånd

När du anger brytningstillstånd, bryter Operation i den slingan och kan inte fortsätta vidare körning. Detta är ganska bra när du inte vill kontrollera ytterligare steg när villkoren uppfyller och körningstiden blir snabbare.

Koda:

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

Produktion:

VM Radera operation

Om du märker att det bara är ett block som körs och sedan kommer det från switchfunktionen.

8. Fortsätt skick

Parameteren Fortsätt används för att hoppa över den specifika iterationen. Om det till exempel finns tre objekt att matcha kommer det att köras först och när villkoret matchar kommer det att hoppa över andra steg och gå till nästa steg.

Koda:

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

Utgång: Första blocket körs

Som du kan se finns det bara ett argument som passeras ('Hej'), det kör det första blocket bara eftersom uttrycket matchar och det finns inget annat argument kvar att köra, skriptet kommer att sluta.

  • Ett mer blandat exempel på paus och fortsätt med Switch.

Koda:

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

Produktion:

Första blocket körs

Andra blocket körs

Slutsats

Sammantaget är Switch mycket bättre än att implementera flera If-villkor och ger mer funktionalitet och reducering av körningstiden.

Rekommenderade artiklar

Detta har varit en guide till Switch Case i PowerShell. Här diskuterar vi också syntax, parametrar och exempel på switch case i Powershell. Du kan också titta på följande artiklar för att lära dig mer-

  1. Vad är Shell Scripting?
  2. PowerShell-kommandon
  3. PowerShell-operatörer
  4. Användningar av Powershell
  5. Guide till Array i PowerShell med exempel

Kategori: