Bevezetés az S boszorkány esetéhez a PowerShell-ben
A PowerShell kapcsoló funkciója több If-utasítás kezelésére szolgál, vagy más értelemben több If / Else / If / Else feltétel helyettesítésére szolgál. Egyetlen feltétel ellenőrzéséhez a szkriptben vagy a Function funkcióban használhatja a If / else utasítást, de ha további IF utasításokat szeretne értékelni, akkor használja a kapcsolót.
A kapcsoló jobban összehasonlítható több If-állítással, könnyen megvalósítható és egyszerűen használható a kódoláshoz. Minden állításnál több feltétel létezik, és ha egyikük teljesül, akkor a művelet végrehajtásra kerül.
Szintaxis:
Switch ()
(
(Action1)
(Action2)
)
Teljes szintaxis:
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
VAGY
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
A kapcsoló eset paraméterei a PowerShell-ben
- Regex : Rendszeres kifejezésnek is hívják. A Rendszeres kifejezés ellenőrzést végez a feltétel értéke alapján. A Regex használatakor a WildCard és az Exacts programot nem veszik figyelembe. Továbbá, ha az egyezési záradék nem karakterlánc, akkor ezt a paramétert nem veszik figyelembe.
- Helyettesítő karakter : Azt jelzi, hogy a feltétel helyettesítő karakterlánc. Ha helyettesítő kártyát használ, a Regex és az Exacts programot nem veszik figyelembe. Továbbá, ha az egyezési záradék nem karakterlánc, akkor ezt a paramétert nem veszik figyelembe.
- Pontos : A mérkőzést a pontos húrra vetíti. Pontos használata esetén a helyettesítő karaktert és a Regex-et figyelmen kívül hagyja, és ha az illesztési záradék nem karakterlánc, akkor ezt a paramétert figyelmen kívül hagyja.
- CaseSensitive: Ez a paraméter ellenőrzi azt az állapotot, amely pontosan egyezik az átadott értékkel (kis- és nagybetű érzékeny), ha nem egyezik, akkor ezt a paramétert figyelmen kívül hagyja. Szükség van egy string értékre is.
- Fájl : A fájl elérési útját bemeneti értékként, és nem karakterlánc értékként veszi. Ha több fájlparamétert adtak át, akkor csak az utolsóra lesz szükség. A fájl minden sorát kiolvassa és kiértékeli a feltételtől függően, és ha a feltétel megegyezik, akkor végrehajtja ezt az értéket, vagy pedig egy írásbeli üzenetet jelenít meg.
folyamatábra
Hogyan működik a kapcsoló a PowerShellben?
Amint a fenti ábra mutatja, minden érték (karakterlánc, egész szám, lebegő vagy más adattípus), tömb, helyettesítő karakter, fájl stb. Átadásakor egyenként elkezdi a feltételek illesztését, és amikor a feltétel megegyezik, a szkript végrehajtja azt a blokkot . Több illesztési érték esetén több ellenőrzés blokk kerül végrehajtásra, és ha nem található egyező érték, és ha az alapértelmezett feltétel van megadva, akkor ezt a blokkot hajtja végre, különben null kimenet lesz.
Példák a kapcsoló esetre a PowerShell-ben
Nézzük meg az adott példát:
1. példa
1. Egyszerű kapcsolófunkció karakterlánccal, egész érték átadva.
Kód:
switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)
Teljesítés: Három
Kód:
switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)
Kimenet: Adatok végrehajtva
Mi van, ha a paraméter nem egyezik a kifejezéssel. Az alábbiakban bemutatott példaként az 5 nem egyezik a kapcsoló esetével. Ebben az esetben a kimenet nulla lesz.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)
A fenti probléma kiküszöböléséhez az alapértelmezettnek meg kell adnia és az alapértelmezett blokkot akkor hajtja végre, ha a paraméterek egyike sem felel meg.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)
Kimenet: Nincs találat
2. példa
Nézzük meg az adott példát:
Különbség az if / else if / else és a Switch kapcsoló között. Az alábbi példából megértheti, hogyan könnyű szkriptet írni a kapcsoló funkcióval.
$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")
)
Teljesítés: 3 óra van
Mindkét módszer végrehajtási ideje.
$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")
)
Összes millió milliszekundum: 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")
)
)
Összes millió milliszekundum: 25, 6802
Különbség: 13, 4614 milliszekundum
Ez a különbség hatalmas lesz, ha hatalmas szkriptet vagy funkciókat írunk a kapcsolón belül.
1. Váltás a Regex paraméterrel
Ha a kapcsolóban említik a Regexet, akkor az kifejezést átadott értékkel értékeli, és ha a feltétel egy része megegyezik, akkor végrehajtja ezt a mûveletet.
Fontolja meg az alábbi példát.
Kód:
Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)
Kimenet: Semmit nem említenek
A Regex hozzáadása után.
Kód:
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 : szamár megemlítve
Szamár ismét megemlítve
2. Váltás a helyettesítő karakter paraméterrel
A helyettesítő karakter hasonlóan működik, mint a Like paraméter.
Kód:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)
Kimenet: WMI hiba
3. Váltás a pontos paraméterrel
A pontos funkció alapértelmezett értéke a kapcsolóban. Nem számít, használja-e vagy sem. De ha két paramétert használ egyszerre, akkor az utolsó paraméter élvez elsőbbséget.
Kód:
Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Kimenet: Nincs világ
Kód:
Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Kimenet: Hello World
4. Váltás a Fájlparaméterrel
A fájl elérési útját közvetlenül a kapcsolóhoz adhatja meg paraméterként. Használhatja a fájlt egy fájl elérési útjával, ahelyett, hogy változó kifejezést adna neki.
Kód:
Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)
Kimenet:
Használhatja a $ PSItem vagy a $ _ fájlokat az aktuális elemek kezeléséhez.
5. Váltás a CaseSensitive paraméterrel
Ha egy kapcsolón nagybetűs érzékelőt használ, akkor a feltételnek pontosan meg kell egyeznie minden karakterrel.
Kód:
switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)
Kimenet: Ez nem egyezik
6. A tömbérték átadása a funkció váltáshoz
Egyszerű tömb:
switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)
Kimenet:
Tíz
Tizenkét
Áthaladó tömb objektum
Kód:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)
Kimenet:
Virtuálisgép törlése művelet
Virtuálisgép létrehozása művelet
7. Szünet állapot
Ha megadja a break feltételt, akkor a Operation megszakad abban a hurokban, és nem tudja folytatni a további végrehajtást. Ez nagyon hasznos, ha nem akarja ellenőrizni a további lépéseket, amikor a feltétel teljesül, és a végrehajtási idő gyorsabb lesz.
Kód:
$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
)
)
Kimenet:
Virtuálisgép törlése művelet
Ha észreveszi, csak egy blokk van végrehajtva, és akkor kilép a kapcsoló funkcióból.
8. Folytassa a feltételt
A Folytatás paraméterrel az adott iteráció kihagyható. Például, ha 3 elem van egyeztetve, akkor az első végrehajtásra kerül, és amikor a feltétel egyezik, akkor átugorja a többi lépést, és a következő lépésre lép.
Kód:
switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)
Kimenet: Az első blokk végrehajt
Mint láthatja, csak egy argumentum került átadásra ('Hello'), csak azért hajtja végre az első blokkot, mert a kifejezés megegyezik, és nincs más argumentum a végrehajtáshoz, a szkript véget ér.
- Még egy vegyes példa a szünetre és folytassa a kapcsolóval.
Kód:
switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)
Kimenet:
Az első blokk végrehajtja
A második blokk végrehajtja
Következtetés
Összességében a Switch sokkal jobb, mint a többszörös If-feltételek megvalósítása, és több funkcionalitást és csökkenti a végrehajtási időt.
Ajánlott cikkek
Ez egy útmutató a Switch Case használatához a PowerShell-ben. Itt a Powershell szintaxisát, paramétereit és a kapcsoló eset példáit is megvitatjuk. Lehet, hogy megnézi a következő cikkeket is, ha többet szeretne megtudni-
- Mi a Shell Scripting?
- PowerShell parancsok
- PowerShell operátorok
- A Powershell felhasználása
- Útmutató a tömbbe a PowerShell-ben példákkal