Ú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.
- Co je Shell Scripting?
- Příkazy PowerShell
- Operátoři PowerShell
- Použití Powershell
- Průvodce po poli v PowerShell s příklady