Introduktion til S witch Case i PowerShell

Skiftfunktion i PowerShell bruges til at håndtere flere If-udsagn eller med andre termer den erstatter flere betingelser If / Else If / Else. Hvis du vil kontrollere en enkelt betingelse i Script eller Funktion, kan du bruge If / else-sætning, men hvis du vil evaluere flere IF-udsagn, skal du bruge Switch.

Switch er bedre sammenlignet med flere If-udsagn og let at implementere og enkel brug til kodning. Der er flere betingelser under hver erklæring, og når en af ​​dem opfylder, udføres handlingen.

Syntaks:

Switch ()
(
(Action1)
(Action2)
)

Fuld syntaks:

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

Parametre af switch case i PowerShell

  • Regex : Det kaldes også Regular Expression. Udfører den regelmæssige udtrykskontrol af værdien af ​​betingelsen. Hvis du bruger Regex, ignoreres WildCard og Exacts. Hvis match-klausulen ikke er en streng, ignoreres denne parameter.
  • Wildcard : Angiver, at betingelsen er en wildcard-streng. Hvis du bruger Wildcard, ignoreres Regex og Exacts. Hvis match-klausulen ikke er en streng, ignoreres denne parameter.
  • Præcis : Udfører kampen mod den nøjagtige streng. Hvis du bruger Exact, ignoreres Wildcard og Regex, og hvis match-klausulen ikke er en streng, ignoreres denne parameter.
  • CaseSensitive: Denne parameter vil kontrollere den tilstand, der matcher nøjagtigt med den bestilte værdi (store og små bogstaver), hvis den ikke stemmer overens, ignoreres denne parameter. Den har også brug for en strengværdi.
  • Fil : Tar filstien som en inputværdi i stedet for en strengværdi. Hvis der overføres flere filparametre, tager det kun den sidste. Hver linje i filen læses og evalueres ud fra betingelsen, og hvis betingelsen matcher, udfører den den værdi eller viser en skriftlig meddelelse.

Flowchart

Hvordan fungerer switch i PowerShell?

Som vist i diagrammet ovenfor, når en værdi (streng, heltal, flydende eller andre datatyper), matrix, jokertegn, filer osv. Er bestået, begynder det at matche betingelser en efter en, og når betingelsen matcher, udfører scriptet den blokering . For flere matchende værdier udføres flere scrips-blokke, og hvis der ikke findes nogen matchende værdi, og hvis standardbetingelse er angivet, udføres den blokken, ellers er der nulloutput.

Eksempler på switch case i PowerShell

Lad os se det givne eksempel:

Eksempel 1

1. Simpel switchfunktion med streng, heltalværdi passeret.

Kode:

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

Output: Tre

Kode:

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

Output: Data udført

Hvad nu, hvis parameteren ikke stemmer overens med udtrykket. Som et eksempel nedenfor, stemmer 5 ikke overens med nogen af ​​Switch-sagerne. I dette tilfælde vil output være null.

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

For at overvinde ovennævnte problem skal standard specificere og udføre standardblok, når ingen af ​​parametrene matcher.

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

Output: Ingen match fundet

Eksempel 2

Lad os se det givne eksempel:

Forskel mellem if / andet hvis / andet og switch. Fra nedenstående eksempel kan du forstå, hvordan det er let at skrive et script 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 er 3 O'Clock

Udførelsestid for begge metoder.

$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

Forskel: 13.4614 millisekunder

Denne forskel bliver stor, når du skriver massivt script eller funktioner inde i kontakten.

1. Skift med Regex-parameter

Hvis Regex nævnes i switch, evaluerer det udtrykket med bestået værdi, og hvis en del af betingelsen matcher, udfører den denne handling.

Overvej eksemplet nedenfor.

Kode:

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

Output: Intet er nævnt

Efter tilføjelse af Regex.

Kode:

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 : Æsel nævnes

Æsel nævnes igen

2. Skift med wildcard-parameter

Wildcard fungerer som parameteren Like.

Kode:

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

Output: WMI-fejl

3. Skift med nøjagtigt parameter

Den nøjagtige funktion er standard i switch. Det betyder ikke noget, om du bruger det eller ej. Men når du bruger to parametre på samme tid, får den sidste parameter forrang.

Kode:

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

Output: Ingen verden

Kode:

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

Output: Hello World

4. Skift med filparameter

Du kan angive en filsti direkte til switch som parameter. Du kan bruge File med en sti til en fil i stedet for at give den et variabelt udtryk.

Kode:

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

Produktion:

Du kan bruge $ PSItem eller $ _ til at arbejde med aktuelle poster.

5. Skift med parameter CaseSensitive

Når du bruger en sagsfølsom parameter i en switch, skal betingelsen matche nøjagtigt efter hvert tegn.

Kode:

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

Output: Dette stemmer ikke overens

6. Overfør Array-værdi for at skifte funktion

Simple Array:

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

Produktion:

Ti

Tolv

Videregående array-objekt

Kode:

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

Produktion:

VM Sletning

VM Oprette operation

7. Brud tilstand

Når du specificerer brudtilstand, brydes Operation i den loop og kan ikke fortsætte med yderligere udførelse. Dette er ret nyttigt, når du ikke ønsker at kontrollere yderligere trin, når betingelsen tilfredsstiller, og udførelsestiden bliver hurtigere.

Kode:

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

Hvis du bemærker, er der kun en blok udført, og derefter afslutter den fra switchfunktionen.

8. Fortsæt tilstand

Fortsæt-parameter bruges til at springe over den bestemte iteration. For eksempel, hvis der er 3 elementer, der skal matche, udføres det først, og når tilstanden matcher, springer den over andre trin og flytter til næste trin.

Kode:

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

Output: Første blok udføres

Som du kan se, der er kun et argument bestået ('Hej'), udføres den første blok kun, fordi udtrykket matcher, og der ikke er noget andet argument tilbage til at udføre, scriptet slutter.

  • Et mere blandet eksempel på pause og fortsæt med Switch.

Kode:

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

Produktion:

Første blok udføres

Anden blok udføres

Konklusion

Alt i alt er Switch langt bedre end at implementere flere If-betingelser og giver mere funktionalitet og reduktion i udførelsestid.

Anbefalede artikler

Dette har været en guide til Switch Case i PowerShell. Her diskuterer vi også syntaks, parametre og eksempler på switch case i Powershell. Du kan også se på de følgende artikler for at lære mere-

  1. Hvad er Shell-scripting?
  2. PowerShell-kommandoer
  3. PowerShell-operatører
  4. Anvendelser af Powershell
  5. Vejledning til Array i PowerShell med eksempler

Kategori: