Introduksjon til S witch Case i PowerShell

Bryterfunksjon i PowerShell brukes til å håndtere flere If-uttalelser eller i andre termer erstatter den flere forhold If / Else If / Else. For å sjekke en enkelt betingelse i Skript eller funksjon, kan du bruke If / else-setningen, men hvis du vil evaluere flere IF-setninger, bruk deretter Switch.

Bytte er bedre å sammenligne med flere Hvis uttalelser og enkle å implementere og enkel bruk for koding. Det er flere forhold under hver uttalelse, og når en av dem tilfredsstiller, utføres handlingen.

syntaks:

Switch ()
(
(Action1)
(Action2)
)

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

Parametere for Switch Case i PowerShell

  • Regex : Det kalles også Regular Expression. Utfører den vanlige uttrykkskontrollen mot verdien av tilstanden. Hvis du bruker Regex, ignoreres WildCard og Exacts. Hvis samsvarsbestemmelsen ikke er en streng, ignoreres denne parameteren.
  • Wildcard : Indikerer at tilstanden er en wildcard-streng. Hvis du bruker Wildcard, ignoreres Regex og Exacts. Hvis samsvarsbestemmelsen ikke er en streng, ignoreres denne parameteren.
  • Eksakt : Utfører kampen mot den eksakte strengen. Hvis du bruker Exact, ignoreres Wildcard og Regex, og hvis samsvarsklausulen ikke er en streng, ignoreres denne parameteren.
  • CaseSensitive: Denne parameteren vil sjekke tilstanden som samsvarer nøyaktig med den bestilte verdien (store og små bokstaver) hvis den ikke stemmer, blir denne parameteren ignorert. Den trenger også en strengverdi.
  • Fil : Tar filstien som en inngangsverdi i stedet for en strengverdi. Hvis flere filparametere sendes, tar det bare den siste. Hver linje i filen blir lest og evaluert mot betingelsen, og hvis betingelsen samsvarer, utfører den den verdien eller viser en skriftlig melding.

Flytskjema

Hvordan fungerer switch i PowerShell?

Som vist over diagrammet, når noen verdi (streng, heltall, flyte eller andre datatyper), matrise, jokertegn, filer osv. Er bestått, begynner det å matche forholdene én etter én, og når tilstanden stemmer, kjøres skriptet som blokkerer . For flere samsvarende verdier vil flere skriptsblokkering bli utført, og hvis ingen samsvarende verdi ble funnet, og hvis standardbetingelse er spesifisert, kjøres den blokkeringen ellers blir det nullutgang.

Eksempler på Switch Case i PowerShell

La oss se det gitte eksemplet:

Eksempel 1

1. Enkel bryterfunksjon med streng, heltalverdi passert.

Kode:

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

Utgang: Tre

Kode:

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

Utgang: Utført data

Hva om parameteren ikke samsvarer med uttrykket. Som et eksempel gitt nedenfor stemmer ikke 5 overens med noen av Switch-sakene. I dette tilfellet vil utgangen være null.

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

For å løse problemet ovenfor, må standard angi og standardblokk kjøres når ingen av parameterne samsvarer.

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

Utgang: Ingen kamp funnet

Eksempel 2

La oss se det gitte eksemplet:

Forskjell mellom if / else if / else og Switch. Fra eksemplet nedenfor kan du forstå hvordan det er enkelt å skrive et manus med Switch-funksjonen.

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

Utgang: Det er 3 O'Clock

Utførelsestid for begge metodene.

$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

Forskjell: 13.4614 millisekunder

Denne forskjellen blir stor når du skriver massivt skript eller funksjoner inne i bryteren.

1. Bytt med Regex-parameter

Hvis Regex er nevnt i bryteren, evaluerer det uttrykket med bestått verdi, og hvis en del av betingelsen samsvarer, utfører den den operasjonen.

Tenk på 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")
)

Utgang: Ingenting er nevnt

Etter å ha lagt til 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")
)

Utgang : esel nevnes

Åselen blir nevnt igjen

2. Bytt med wildcard-parameter

Wildcard fungerer på samme måte som parameteren Like.

Kode:

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

Utgang: WMI-feil

3. Bytt med eksakt parameter

Eksakt funksjon er standard i Bryter. Det har ikke noe å si om du bruker det eller ikke. Men når du bruker to parametere samtidig, har den siste parameteren forrang.

Kode:

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

Utgang: Ingen verden

Kode:

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

Utgang: Hello World

4. Bytt med filparameter

Du kan oppgi en filsti direkte til bryteren som parameter. Du kan bruke Fil med en bane til en fil i stedet for å gi den et variabelt uttrykk.

Kode:

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

Produksjon:

Du kan bruke $ PSItem eller $ _ for å jobbe med nåværende elementer.

5. Bytt med CaseSensitive-parameter

Når du bruker en Casesensitive parameter i en bryter, må betingelsen samsvare nøyaktig med hvert tegn.

Kode:

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

Output: Dette stemmer ikke

6. Passing Array Value for å bytte funksjon

Enkel matrise:

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

Produksjon:

Ti

Tolv

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

Produksjon:

VM Delete Operation

VM Opprette operasjon

7. Bruddtilstand

Når du spesifiserer bruddtilstand, bryter Operasjon i den loopen og kan ikke fortsette videre utførelse. Dette er ganske nyttig når du ikke vil sjekke ytterligere trinn når tilstanden tilfredsstiller og utførelsestiden blir raskere.

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

Produksjon:

VM Delete Operation

Hvis du merker det, er det bare en blokk utført, og deretter kommer den ut fra bryterfunksjonen.

8. Fortsett tilstanden

Fortsett parameter brukes til å hoppe over den aktuelle iterasjonen. For eksempel, hvis det er tre elementer å matche, vil den utføres først, og når tilstanden samsvarer, vil den hoppe over andre trinn og gå til neste trinn.

Kode:

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

Utgang: Første blokkering kjøres

Som du kan se at det bare er gått ett argument ('Hei'), kjøres den første blokken bare fordi uttrykket stemmer overens og det ikke er noe annet argument igjen å utføre, vil skriptet slutte.

  • Et mer blandet eksempel på pause og fortsett med Switch.

Kode:

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

Produksjon:

Første blokkering kjøres

Andre blokkering kjører

Konklusjon

Alt i alt er Switch langt bedre enn å implementere flere If-forhold og gir mer funksjonalitet og reduksjon i utførelsestid.

Anbefalte artikler

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

  1. Hva er Shell Scripting?
  2. PowerShell-kommandoer
  3. PowerShell-operatører
  4. Bruk av Powershell
  5. Guide to Array i PowerShell med eksempler

Kategori: