Ú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 -

  1. Čo je to Shell Scripting?
  2. Príkazy PowerShell
  3. Operátori PowerShell
  4. Použitie Powershell
  5. Sprievodca po poli v PowerShell s príkladmi

Kategórie: