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-

  1. Mi a Shell Scripting?
  2. PowerShell parancsok
  3. PowerShell operátorok
  4. A Powershell felhasználása
  5. Útmutató a tömbbe a PowerShell-ben példákkal

Kategória: