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 -
- Što je Shell Scripting?
- Naredbe PowerShell
- Operatori PowerShell-a
- Koristi Powershell
- Vodič za niz u programu PowerShell s primjerima