Úvod do případu čarodějnice S v PowerShell

Funkce Switch v PowerShell se používá pro zpracování více příkazů If nebo jinými slovy, je to náhrada více podmínek If / Else If / Else. Chcete-li zkontrolovat jednu podmínku v skriptu nebo funkci, můžete použít příkaz If / else, ale pokud chcete vyhodnotit více příkazů IF, použijte přepínač.

Přepínač je lepší porovnat s více příkazy If a snadno implementovat a snadno použít pro kódování. V každém příkazu existuje více podmínek a pokud jedna z nich vyhovuje, je provedena akce.

Syntax:

Switch ()
(
(Action1)
(Action2)
)

Úplná syntaxe:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

NEBO

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Parametry spínací skříňky v PowerShell

  • Regex : Nazývá se také regulární výraz. Provede kontrolu regulárního výrazu s hodnotou podmínky. Pokud používáte Regex, WildCard a Exacts jsou ignorovány. Pokud klauzule match není řetězec, bude tento parametr ignorován.
  • Zástupný znak : Označuje, že podmínkou je zástupný řetězec. Pokud používáte zástupné znaky, Regex a Exacts jsou ignorovány. Pokud klauzule match není řetězec, bude tento parametr ignorován.
  • Přesný : Provede shodu s přesným řetězcem. Pokud používáte Exact, zástupné znaky a Regex jsou ignorovány a pokud klauzule match není řetězec, je tento parametr ignorován.
  • CaseSensitive: Tento parametr zkontroluje stav, který se přesně shoduje s předanou hodnotou (velká a malá písmena), pokud se neshoduje, pak je tento parametr ignorován. Vyžaduje také hodnotu řetězce.
  • Soubor : Cesta k souboru se bere jako vstupní hodnota, nikoli jako hodnota řetězce. Pokud je předáno více parametrů souboru, trvá pouze poslední. Každý řádek souboru je načten a vyhodnocen proti stavu a pokud se podmínka shoduje, provede tuto hodnotu nebo zobrazí písemnou zprávu.

Vývojový diagram

Jak přepínač funguje v PowerShell?

Jak je vidět na obrázku výše, kdykoli je předána jakákoli hodnota (řetězec, celé číslo, plovoucí nebo jiné datové typy), pole, zástupné znaky, soubory atd., Začne postupně odpovídat podmínkám a když se podmínky shodují, skript provede tento blok . U více shodných hodnot bude proveden blok více skriptů a pokud není nalezena žádná odpovídající hodnota a pokud je stanovena výchozí podmínka, provede tento blok, jinak dojde k nulovému výstupu.

Příklady spínače v PowerShell

Podívejme se na uvedený příklad:

Příklad č. 1

1. Jednoduchá funkce přepínání s řetězcem, předáno celé číslo.

Kód:

switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)

Výstup: Tři

Kód:

switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)

Výstup: Data byla provedena

Co když parametr neodpovídá výrazu. Jako příklad uvedený níže se 5 neshoduje s žádným z případů přepínače. V tomto případě bude výstup nulový.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)

K překonání výše uvedeného problému je třeba zadat výchozí a výchozí blok se spustí, když se žádný z parametrů neshoduje.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)

Výstup: Nebyla nalezena žádná shoda

Příklad č. 2

Podívejme se na uvedený příklad:

Rozdíl mezi if / else if / else a Switch. Z níže uvedeného příkladu můžete pochopit, jak snadné je napsat skript pomocí funkce Přepnout.

$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

Doba provedení pro obě metody.

$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")
)

TotalMillisekundy: 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")
)
)

TotalMillisekundy: 25, 6802

Rozdíl: 13, 4614 milisekund

Tento rozdíl se stane obrovským, když v přepínači napíšete masivní skript nebo funkce.

1. Přepněte pomocí parametru Regex

Pokud je v přepínači uveden Regex, vyhodnotí výraz s předanou hodnotou a pokud se část podmínky shoduje, provede tuto operaci.

Zvažte příklad níže.

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: Nic není uvedeno

Po přidání 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 : Osel je uveden

Osel je znovu zmíněn

2. Přepněte pomocí parametru zástupných znaků

Zástupné znaky fungují podobně jako parametr 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. Přepněte pomocí přesného parametru

Přesná funkce je ve spínači výchozí. Nezáleží na tom, jestli je používáte nebo ne. Pokud však použijete dva parametry současně, bude mít přednost poslední parametr.

Kód:

Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Výstup: Žádný svět

Kód:

Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Výstup: Ahoj svět

4. Přepněte pomocí parametru File

Jako parametr můžete zadat cestu k souboru přímo k přepínači. Soubor můžete použít s cestou k souboru namísto toho, abyste mu dali variabilní výraz.

Kód:

Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)

Výstup:

Pro práci s aktuálními položkami můžete použít $ PSItem nebo $ _.

5. Přepněte pomocí parametru CaseSensitive

Použijete-li v přepínači Casesensitive parametr, podmínka se musí přesně shodovat s každým znakem.

Kód:

switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)

Výstup: Toto neodpovídá

6. Předávání hodnoty pole pro přepnutí funkce

Simple Array:

switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)

Výstup:

Deset

Dvanáct

Předávání 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ýstup:

Operace odstranění VM

Operace vytvoření VM

7. Stav zlomu

Když určíte podmínku přerušení, operace se přeruší v této smyčce a nemůže pokračovat v dalším provádění. To je velmi užitečné, pokud nechcete kontrolovat další kroky, když podmínka splňuje a doba provedení se zrychlí.

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ýstup:

Operace odstranění VM

Pokud si všimnete, je proveden pouze jeden blok a poté opustí funkci přepínání.

8. Pokračovat Stav

Parametr Continue se používá k přeskočení konkrétní iterace. Například pokud existují 3 položky, které se mají shodovat, provede se nejprve a když se podmínky shodují, přeskočí další kroky a přejde k dalšímu kroku.

Kód:

switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)

Výstup: Provádí se první blok

Jak vidíte, je předán pouze jeden argument ('Ahoj'), provede první blok pouze proto, že se výraz shoduje a nezbývá žádný jiný argument k provedení, skript skončí.

  • Ještě jeden smíšený příklad přestávky a pokračování s Switch.

Kód:

switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)

Výstup:

Provádí se první blok

Spustí se druhý blok

Závěr

Celkově vzato je přepínač mnohem lepší než implementace více podmínek If a poskytuje více funkcí a zkrácení doby provádění.

Doporučené články

Toto byl průvodce přepínačem Case v PowerShell. Tady také diskutujeme syntaxi, parametry a příklady přepínače v Powershell. Další informace naleznete také v následujících článcích.

  1. Co je Shell Scripting?
  2. Příkazy PowerShell
  3. Operátoři PowerShell
  4. Použití Powershell
  5. Průvodce po poli v PowerShell s příklady

Kategorie: