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-
- Vad är Shell Scripting?
- PowerShell-kommandon
- PowerShell-operatörer
- Användningar av Powershell
- Guide till Array i PowerShell med exempel