Úvod do prípadu čarodejnice S v PowerShell
Funkcia Switch v PowerShell sa používa na spracovanie viacerých príkazov If alebo inými slovami, je to náhrada viacerých podmienok If / Else If / Else. Ak chcete skontrolovať jednu podmienku v skripte alebo funkcii, môžete použiť príkaz If / else, ale ak chcete vyhodnotiť viac príkazov IF, potom použite Switch.
Prepínač je lepšie porovnávať s viacerými príkazmi If a ľahko implementovať a ľahko použiť na kódovanie. V každom výkaze je viacero podmienok a ak jedna z nich vyhovuje, vykoná sa akcia.
syntaxe:
Switch ()
(
(Action1)
(Action2)
)
Úplná syntax:
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
OR
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
Parametre skrinky skrinky v PowerShell
- Regex : nazýva sa tiež regulárny výraz. Vykonáva kontrolu regulárneho výrazu podľa hodnoty stavu. Ak používate Regex, WildCard a Exacts sa ignorujú. Ak klauzula zhody nie je reťazec, tento parameter sa ignoruje.
- Zástupný znak: Označuje, že podmienkou je zástupný reťazec. Ak používate zástupné znaky, položky Regex a Exacts sa ignorujú. Ak klauzula zhody nie je reťazec, tento parameter sa ignoruje.
- Presný : Vykoná zhodu s presným reťazcom. Ak používate Exact, Wildcard a Regex, sú ignorované a ak klauzula match nie je reťazec, tento parameter sa ignoruje.
- CaseSensitive: Tento parameter skontroluje stav, ktorý sa presne zhoduje s odovzdanou hodnotou (rozlišujú sa malé a veľké písmená), ak sa nezhoduje, potom sa tento parameter ignoruje. Potrebuje tiež hodnotu reťazca.
- File (Súbor) : Cesta k súboru sa považuje za vstupnú hodnotu a nie za hodnotu reťazca. Ak je odovzdaných viac parametrov súboru, trvá iba posledný. Každý riadok súboru sa načíta a vyhodnotí podľa stavu a ak sa stav zhoduje, vykoná túto hodnotu alebo zobrazí písomnú správu.
vývojový diagram
Ako funguje prepínač v PowerShell?
Ako je znázornené na obrázku vyššie, vždy, keď je odovzdaná nejaká hodnota (reťazec, celé číslo, float alebo iné typy údajov), pole, zástupné znaky, súbory atď., Začne sa postupne porovnávať podmienky a keď sa podmienky zhodujú, skript vykoná tento blok, Pri viacerých zhodných hodnotách sa vykoná blok viacerých skriptov a ak sa nenájde žiadna zhodná hodnota a ak je zadaná predvolená podmienka, vykoná tento blok, inak dôjde k nulovému výstupu.
Príklady spínača v PowerShell
Pozrime sa na uvedený príklad:
Príklad č. 1
1. Jednoduchá funkcia prepínania s reťazcom, prešlo celé číslo.
kód:
switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)
Výstup: tri
kód:
switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)
Výstup: Spustené údaje
Čo ak parameter nezodpovedá výrazu. Ako príklad uvedený nižšie sa 5 nezhoduje so žiadnym z prípadov prepínania. V tomto prípade bude výstup nulový.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)
Na prekonanie uvedeného problému je potrebné zadať predvolený blok a vykoná sa predvolený blok, keď sa žiadny z parametrov nezhoduje.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)
Výstup: Nebola nájdená žiadna zhoda
Príklad č. 2
Pozrime sa na uvedený príklad:
Rozdiel medzi if / else if / else a Switch. Z nižšie uvedeného príkladu je zrejmé, ako ľahko je možné písať skript pomocou funkcie Prepnúť.
$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")
)
Výstup: Je to 3 hodiny
Čas vykonávania oboch metód.
$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")
)
Celkom milisekundy: 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")
)
)
CelkomMillisekundy: 25, 6802
Rozdiel: 13, 4614 milisekúnd
Tento rozdiel sa stáva obrovským, keď v prepínači píšete rozsiahle skripty alebo funkcie.
1. Prepnite pomocou parametra Regex
Ak je v prepínači uvedený Regex, vyhodnotí výraz s odovzdanou hodnotou a ak sa časť podmienky zhoduje, vykoná túto operáciu.
Zoberme si príklad uvedený nižšie.
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")
)
Výstup: Nič sa nespomína
Po pridaní Regex.
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")
)
Výstup : Uvádza sa osol
Osel sa znova spomína
2. Prepnite pomocou parametra zástupných znakov
Zástupné znaky fungujú podobne ako parameter Like.
kód:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)
Výstup: Chyba WMI
3. Prepnite pomocou presného parametra
Presná funkcia je v Switch prepnutá. Nezáleží na tom, či ho používate alebo nie. Ak však použijete dva parametre súčasne, má prednosť posledný parameter.
kód:
Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Výstup: Žiadny svet
kód:
Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Výstup: Ahoj svet
4. Prepnite pomocou parametra súboru
Cestu k súboru môžete zadať priamo ako parameter. Súbor môžete použiť s cestou k súboru namiesto toho, aby ste mu dali variabilný výraz.
kód:
Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)
Výkon:
Na prácu s aktuálnymi položkami môžete použiť $ PSItem alebo $ _.
5. Prepnite pomocou parametra CaseSensitive
Ak v prepínači používate parameter nerozlišujúci veľké a veľké písmená, potom sa podmienka musí presne zhodovať s každým znakom.
kód:
switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)
Výstup: Toto nie je zhoda
6. Odovzdanie hodnoty poľa na prepnutie funkcie
Simple Array:
switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)
Výkon:
desať
dvanásť
Odovzdávanie objektu Array
kód:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)
Výkon:
Operácia odstránenia VM
Operácia vytvorenia VM
7. Stav zlomu
Ak zadáte stav prerušenia, potom sa operácia preruší v tejto slučke a nemôže pokračovať v ďalšom vykonávaní. Je to užitočné, ak nechcete kontrolovať ďalšie kroky, keď sa splní podmienka a čas vykonávania sa skráti.
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
)
)
Výkon:
Operácia odstránenia VM
Ak si všimnete, vykoná sa iba jeden blok a potom opustí funkciu prepínania.
8. Pokračovanie stavu
Parameter Continue sa používa na preskočenie konkrétnej iterácie. Napríklad, ak existujú 3 položky, ktoré sa majú zhodovať, potom sa vykoná ako prvá, a keď sa podmienky zhodujú, potom preskočí ďalšie kroky a prejde na ďalší krok.
kód:
switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)
Výstup: Vykonáva sa prvý blok
Ako vidíte, prešiel iba jeden argument („Ahoj“), vykoná prvý blok iba preto, že výraz sa zhoduje a nezostáva už žiadny iný argument na vykonanie, skript sa skončí.
- Ešte jeden zmiešaný príklad prerušenia a pokračovanie s prepínačom.
kód:
switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)
Výkon:
Vykonanie prvého bloku
Vykonanie druhého bloku
záver
Celkovo vzaté, prepínač je oveľa lepší ako implementácia viacerých podmienok If a poskytuje viac funkcií a skrátenie času vykonávania.
Odporúčané články
Toto bol návod na prepínanie skríň v PowerShell. Tu tiež diskutujeme syntax, parametre a príklady prípadu prepínania v Powershell. Môžete sa tiež pozrieť na nasledujúce články, kde sa dozviete viac -
- Čo je to Shell Scripting?
- Príkazy PowerShell
- Operátori PowerShell
- Použitie Powershell
- Sprievodca po poli v PowerShell s príkladmi