Uvod u slučaj S vještica u PowerShellu

Prekidačka funkcija u PowerShellu koristi se za obradu višestrukih If izjava ili u drugim uvjetima to je zamjena višestrukih uvjeta If / Else If / Else. Da biste provjerili jedan uvjet u Skriptu ili Funkciji, možete upotrijebiti izraz If / else, ali ako želite procijeniti više IF izjava, tada upotrijebite Switch.

Prebacivanje je bolje u usporedbi s više If izjava i jednostavan za implementaciju i jednostavna uporaba za kodiranje. U svakoj se izreci nalazi više uvjeta, a kada jedan od njih zadovoljava, tada se radnja izvodi.

Sintaksa:

Switch ()
(
(Action1)
(Action2)
)

Potpuna sintaksa:

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

ILI

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

Parametri kućišta prekidača u PowerShellu

  • Regex : Naziva se i Regular Expression. Izvršava Provjera regularnog izraza prema vrijednosti stanja. Ako koristite Regex, WildCard i Exacts zanemaruju se. Također, ako klauzula podudaranja nije niz, tada se ovaj parametar zanemaruje.
  • Nadimak : označava da je uvjet zamjenski niz. Ako koristite Wildcard, Regex i Exacts zanemaruju se. Također, ako klauzula podudaranja nije niz, tada se ovaj parametar zanemaruje.
  • Točno : Izvodi utakmicu protiv točnog niza. Ako koristite Exact, Wildcard i Regex se zanemaruju i ako klauzula podudaranja nije niz, tada se ovaj parametar zanemaruje.
  • CaseSensitive: Ovaj će parametar provjeriti stanje koje se točno podudara s prenesenom vrijednosti (osetljiva na velika i mala slova) ako se ne podudara, a taj se parametar zanemaruje. Također treba vrijednost niza.
  • Datoteka : putanju datoteke uzima kao ulaznu vrijednost, a ne kao vrijednost niza. Ako se prenese više parametara datoteke, potrebna je samo posljednja. Svaki se redak datoteke čita i procjenjuje prema stanju, a ako se uvjet podudara, tada izvršava tu vrijednost ili prikazuje pisanu poruku.

Dijagram toka

Kako djeluje prekidač u PowerShellu?

Kao što je prikazano na gornjem dijagramu, kad god se prenese bilo koja vrijednost (niz, cjelobrojni broj, plovak ili druge vrste podataka), niz, zamjenske znakove, datoteke, itd., Tada započinje podudaranje uvjeta jedan po jedan, a kada se uvjet podudara, skripta izvršava taj blok, Za više vrijednosti podudaranja izvršiće se više blokova skripti i ako nije pronađena vrijednost podudaranja, a ako je naveden zadani uvjet, izvršava taj blok, a u protivnom postoji nultu izlaznost.

Primjeri kućišta prekidača u PowerShellu

Pogledajmo dati primjer:

Primjer 1

1. Jednostavna funkcija prebacivanja s nizom, cijelim brojem prenesenih vrijednosti.

Kodirati:

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

Izlaz: Tri

Kodirati:

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

Izlaz: Podaci izvršeni

Što ako parametar ne odgovara izrazu. Kao primjer naveden u nastavku, 5 se ne podudara ni s jednim slučajem Switch. U ovom slučaju, izlaz će biti nula.

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

Da bi se riješio gore navedeni problem, zadano je potrebno odrediti i zadani blok izvršiti kad se nijedan parametar ne podudara.

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

Izlaz: Nije pronađeno podudaranje

Primjer 2

Pogledajmo dati primjer:

Razlika između if / else if / else i Switch. Iz primjera u nastavku možete shvatiti kako je lako napisati skriptu s funkcijom 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")
)

Izlaz: To je 3 O'Clock

Vrijeme izvođenja za obje metode.

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

Ukupno milisekundi: 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")
)
)

Ukupno milisekundi: 25.6802

Razlika: 13.4614 milisekundi

Ta razlika postaje ogromna kad u preklopnik napišete masivni skriptu ili funkcije.

1. Prebacite se s parametrom Regex

Ako se Regex spominje u prekidaču, on procjenjuje izraz s prenesenom vrijednošću i ako se dio uvjeta podudara, tada on izvršava tu operaciju.

Razmotrite donji primjer.

Kodirati:

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

Izlaz: Ništa se ne spominje

Nakon dodavanja Regexa.

Kodirati:

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

Izlaz : Spomenut je magarac

Opet se spominje magarac

2. Prebacite se s parametrom Wildcard

Uobičajeni znak djeluje slično parametru Like.

Kodirati:

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

Izlaz: Pogreška WMI

3. Prebacite se s točnim parametrom

Točna funkcija je zadana u sklopci. Nije važno da li ga koristite ili ne. Ali ako koristite dva parametra istovremeno, posljednji parametar ima prednost.

Kodirati:

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

Izlaz: Nema svijeta

Kodirati:

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

Izlaz: Hello World

4. Prebacite se s parametrom datoteke

Kao parametar možete navesti put datoteke izravno do Prekidača. Datoteku možete koristiti sa stazom do datoteke umjesto da joj dajete varijabilni izraz.

Kodirati:

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

Izlaz:

Možete koristiti $ PSItem ili $ _ za rad s tekućim stavkama.

5. Prebacite se s parametrom CaseSensitive

Kada koristite parametar Casesensitive u prekidaču, uvjet se mora točno podudarati sa svakim znakom.

Kodirati:

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

Izlaz: To se ne podudara

6. Prolaženje Array Vrijednosti za prebacivanje na funkciju

Jednostavno polje:

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

Izlaz:

Deset

Dvanaest

Prolaženje Array objekta

Kodirati:

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

Izlaz:

Operacija brisanja VM-a

VM Create Operation

7. Stanje prekida

Kada odredite uvjet prekida, tada se Operacija prekida u toj petlji i ne može nastaviti s daljnjim izvršavanjem. Ovo je korisno kad ne želite provjeravati daljnje korake kada se uvjet zadovolji i vrijeme izvršenja postaje brže.

Kodirati:

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

Izlaz:

Operacija brisanja VM-a

Ako primijetite, izvršen je samo jedan blok i on tada izlazi iz funkcije prekidača.

8. Nastavite stanje

Parametar Continue koristi se za preskakanje pojedine iteracije. Na primjer, ako postoje 3 stavke za podudaranje, one će se prvo izvršiti, a kada se uslovi podudaraju, preskočit će ostale korake i prijeći na sljedeći korak.

Kodirati:

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

Izlaz: prvi blok izvršava

Kao što možete vidjeti da je proslijeđen samo jedan argument ('Zdravo'), prvi blok izvršava samo zato što se izraz podudara i nema preostalih drugih argumenata za izvršavanje, skripta će se završiti.

  • Još jedan miješani primjer prekida i nastavka s Switch-om.

Kodirati:

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

Izlaz:

Prvi blok izvršava

Drugi blok izvršava

Zaključak

Sve u svemu, Switch je daleko bolji od implementacije višestrukih If uvjeta i pruža veću funkcionalnost i smanjenje vremena izvršenja.

Preporučeni članci

Ovo je vodič za prebacivanje kućišta u programu PowerShell. Ovdje također raspravljamo o sintaksi, parametrima i primjerima slučaja prekidača u Powershellu. Također možete pogledati sljedeće članke da biste saznali više -

  1. Što je Shell Scripting?
  2. Naredbe PowerShell
  3. Operatori PowerShell-a
  4. Koristi Powershell
  5. Vodič za niz u programu PowerShell s primjerima

Kategorija: