Uvod v primer S čarovnicami v PowerShellu

Preklopna funkcija v PowerShellu se uporablja za obdelavo več stavkov If ali v drugih pogojih, je zamenjava več pogojev If / Else If / Else. Če želite preveriti en pogoj v Skriptu ali funkciji, lahko uporabite stavek If / else, če pa želite oceniti več stavkov IF, potem uporabite Switch.

Switch je bolje primerjati z več stavki If in enostavno izvedljivo ter preprosto kodiranje. Pod vsako izjavo je več pogojev, in ko eden od njih izpolnjuje, se izvede dejanje.

Sintaksa:

Switch ()
(
(Action1)
(Action2)
)

Celotna sintaksa:

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

ALI

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

Parametri ohišja stikala v PowerShellu

  • Regex : Imenujemo ga tudi Regular Expression. Izvede preverjanje regularnega izraza glede na vrednost pogoja. Če uporabljate Regex, WildCard in Exacts se ne upoštevajo. Če tudi klavzula o ujemanju ni niz, potem je ta parameter prezrt.
  • Nadomestni znak: pomeni, da je pogoj niz z nizkimi črkami. Če uporabljate Wildcard, Regex in Exacts se ne upoštevajo. Če tudi klavzula o ujemanju ni niz, potem je ta parameter prezrt.
  • Točno : Izvede tekmo proti natančno nizu. Če uporabljate Exact, Wildcard in Regex se prezrejo in če klavzula ujemanja ni niz, potem je ta parameter prezrt.
  • CaseSensitive: Ta parameter bo preveril stanje, ki se natančno ujema s posredovano vrednostjo ( velika in velika ), če se ne ujema, potem je ta parameter prezrt. Prav tako potrebuje vrednost niza.
  • File : Datoteka datoteke vzame kot vhodno vrednost in ne kot vrednost niza. Če posredujemo več parametrov datoteke, je potreben samo zadnji. Vsaka vrstica datoteke se prebere in oceni glede na pogoj, in če se stanje ujema, potem to vrednost izvrši ali prikaže pisno sporočilo.

Diagram poteka

Kako stikalo deluje v PowerShellu?

Kot je prikazano na zgornjem diagramu, se vsakič, ko se prenese kakršna koli vrednost (niz, celo število, plovec ali druge vrste podatkov), matrika, nadomestni znaki, datoteke itd., Začne ujemanje pogojev drug za drugim in ko se stanje ujema, skript izvede ta blok . Za več ujemajočih se vrednosti bo izveden več blokov skriptov in če ni najdene vrednosti ujemanja in če je določen privzeti pogoj, potem ta blok izvede, sicer ni ničesar.

Primeri preklopnega ohišja v PowerShellu

Poglejmo primer:

Primer # 1

1. Preprosta stikalna funkcija z nizom, celo število preneseno vrednost.

Koda:

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

Izhod: tri

Koda:

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

Izhod: Izvedeni podatki

Zdaj pa kaj, če se parameter ne ujema z izrazom. Kot primer, naveden spodaj, se 5 ne ujema z nobenim primerom stikala. V tem primeru bo izhod ničen.

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

Za odpravo zgornje težave je treba privzeto določiti in privzeti blok se izvede, kadar se noben od parametrov ne ujema.

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

Izhod: ni mogoče najti ujemanja

Primer # 2

Poglejmo primer:

Razlika med / if if if else in Switch. Iz spodnjega primera lahko razberete, kako je enostavno napisati skript s funkcijo Switch.

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

Izhod: To je 3 O'Clock

Čas izvajanja za obe metodi.

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

Skupaj milisekunde: 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")
)
)

TotalMillisekunde: 25.6802

Razlika: 13.4614 milisekund

Ta razlika postane velika, ko v stikalo napišete ogromen skript ali funkcije.

1. Preklopite s parametrom Regex

Če je Regex omenjen v stikalu, oceni izraz s preneseno vrednostjo in če se del pogoja ujema, potem izvede to operacijo.

Razmislite o spodnjem primeru.

Koda:

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

Rezultat: Nič ni omenjeno

Po dodajanju zdravila 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")
)

Izhod : Osel je omenjen

Osel se spet omenja

2. Preklopite s parametrom Wildcard

Wildcard deluje podobno kot parameter Like.

Koda:

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

Izhod: Napaka WMI

3. Preklopite z natančnim parametrom

Točna funkcija je priklopljena privzeto. Ni važno, ali ga uporabljate ali ne. Če hkrati uporabljate dva parametra, ima prednost zadnji parameter.

Koda:

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

Rezultat: Ni sveta

Koda:

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

Rezultat: Pozdravljeni svet

4. Preklopite s parametrom datoteke

Kot parameter lahko podate pot do datoteke neposredno do stikala. Datoteko lahko uporabite s potjo do datoteke, namesto da ji dodate spremenljiv izraz.

Koda:

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

Izhod:

Za delo s trenutnimi predmeti lahko uporabite $ PSItem ali $ _.

5. Preklopite s parametrom CaseSensitive

Ko v stikalu uporabljate parameter Casesensitive, se mora pogoj natančno ujemati po vsakem znaku.

Koda:

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

Rezultat: To se ne ujema

6. Prenos vrednosti matrike za preklop funkcije

Preprost niz:

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

Izhod:

Deset

Dvanajst

Mimo objekta Array

Koda:

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

Izhod:

VM operacija brisanja

VM Create Operation

7. Pogoj preloma

Ko določite pogoj preloma, potem se operacija prekine v tej zanki in ne more nadaljevati nadaljnjega izvajanja. To je zelo koristno, če ne želite preverjati nadaljnjih korakov, ko se stanje izpolni in čas izvedbe postane hitrejši.

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

Izhod:

VM operacija brisanja

Če opazite, se izvede samo en blok in nato izstopi iz funkcije stikala.

8. Nadaljujte s pogojem

Parameter Nadaljuj se uporablja za preskok določene iteracije. Na primer, če se bodo ujemali trije elementi, se bo najprej izvedel, ko pa se stanje ujema, bo preskočil druge korake in prešel na naslednji korak.

Koda:

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

Izhod: Izvede se prvi blok

Kot lahko vidite, da je posredovan samo en argument ("Pozdravljeni"), prvi blok izvrši samo zato, ker se izraz ujema in za izvedbo ni preostalo drugega argumenta, skript se bo končal.

  • Še en mešan primer prekinitve in nadaljevanja s Switchom.

Koda:

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

Izhod:

Izvede se prvi blok

Drugi blok se izvrši

Zaključek

Skupno je Switch veliko boljši od izvajanja več If pogojev in zagotavlja več funkcionalnosti in krajši čas izvedbe.

Priporočeni članki

To je vodnik za stikalo Case v PowerShellu. Tukaj razpravljamo tudi o sintaksi, parametrih in primerih primera stikala v Powershellu. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Kaj je Shell Scripting?
  2. Ukazi PowerShell
  3. Operaterji PowerShell
  4. Uporabe Powershell-a
  5. Vodnik po Array v PowerShellu s primeri

Kategorija: