Introducere în cazul S- vrăjitoare în PowerShell
Funcția de comutare în PowerShell este utilizată pentru a gestiona declarații If multiple sau în alți termeni, este înlocuirea mai multor condiții If / Else If / Else. Pentru a verifica o singură condiție în Script sau Funcție, puteți utiliza instrucțiunea If / else, dar dacă doriți să evaluați mai multe declarații IF, atunci utilizați Switch.
Comutarea este mai bună în comparație cu mai multe instrucțiuni If și ușor de implementat și simplă utilizare pentru codare. Există mai multe condiții în cadrul fiecărei afirmații și când una dintre ele satisface, atunci acțiunea este executată.
Sintaxă:
Switch ()
(
(Action1)
(Action2)
)
Sintaxă completă:
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
SAU
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
Parametrii carcasei comutatorului în PowerShell
- Regex : se mai numește și expresie regulată. Efectuează verificarea expresiei regulate cu valoarea condiției. Dacă utilizați Regex, WildCard și Exacts sunt ignorate. De asemenea, dacă clauza de potrivire nu este un șir, acest parametru este ignorat.
- Wildcard : indică faptul că starea este un șir de wildcard. Dacă utilizați Wildcard, Regex și Exacts sunt ignorate. De asemenea, dacă clauza de potrivire nu este un șir, acest parametru este ignorat.
- Exact : execută meciul cu șirul exact. Dacă utilizați Exact, Wildcard și Regex sunt ignorate și dacă clauza de potrivire nu este un șir, acest parametru este ignorat.
- MaySensitive: Acest parametru va verifica starea care se potrivește exact cu Valoarea trecută (sensibilă la litere mari și mici) dacă nu se potrivește, atunci acest parametru este ignorat. De asemenea, are nevoie de o valoare de șir.
- File : ia calea fișierului ca valoare de intrare, mai degrabă decât ca valoare string. Dacă se trec mai mulți parametri de fișier, este nevoie doar de ultimul. Fiecare linie a fișierului este citită și evaluată în funcție de condiție și dacă condiția se potrivește atunci execută acea valoare sau afișează un mesaj scris.
Flowchart
Cum funcționează comutatorul în PowerShell?
Așa cum se arată în diagrama de mai sus, ori de câte ori orice valoare (șir, Integer, float sau alte tipuri de date), tablou, wildcard, fișiere etc. este trecut, atunci începe potrivirea condițiilor una câte una și când condiția se potrivește, scriptul execută acel bloc . Pentru mai multe valori de potrivire, se va executa mai multe blocuri de scriere și dacă nu se găsește nicio valoare de potrivire și dacă nu este specificată condiția implicită, atunci se execută acel bloc în caz contrar, există ieșire nulă.
Exemple de cutie de comutare în PowerShell
Să vedem exemplul dat:
Exemplul # 1
1. Funcție de comutare simplă cu șir, valoare întreagă trecută.
Cod:
switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)
Rezultat: trei
Cod:
switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)
Rezultat: Date executate
Acum, ce se întâmplă dacă parametrul nu se potrivește cu expresia. Ca un exemplu dat mai jos, 5 nu se potrivesc cu niciunul dintre cazurile Switch. În acest caz, producția va fi nulă.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)
Pentru a depăși problema de mai sus, implicit trebuie specificat și blocul implicit se execută atunci când niciunul dintre parametri nu se potrivește.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)
Rezultat: Nu a fost găsită nicio potrivire
Exemplul # 2
Să vedem exemplul dat:
Diferența între if / else if / else și Switch. Din exemplul de mai jos, puteți înțelege cum este ușor să scrieți un script cu funcția Switch.
$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")
)
Rezultat: este 3 O'Clock
Timp de execuție pentru ambele metode.
$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")
)
TotalMillisecunde: 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")
)
)
TotalMillisecunde: 25.6802
Diferență: 13.4614 milisecunde
Această diferență devine vastă atunci când scrieți script masiv sau funcții în interiorul comutatorului.
1. Comutați cu parametrul Regex
Dacă Regex este menționat în switch, evaluează expresia cu valoarea trecută și dacă o parte din condiție se potrivește atunci execută acea operație.
Luați în considerare exemplul de mai jos.
Cod:
Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)
Rezultat: Nu se menționează nimic
După adăugarea Regex.
Cod:
Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)
Rezultat : Măgarul este menționat
Măgarul este menționat din nou
2. Comutați cu parametrul Wildcard
Wildcard funcționează similar cu parametrul Like.
Cod:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)
Ieșire: eroare WMI
3. Comutați cu parametrul exact
Funcția exactă este implicită în comutator. Nu contează dacă îl folosești sau nu. Dar când utilizați doi parametri în același timp, atunci ultimul parametru are prioritate.
Cod:
Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Rezultat: Fără lume
Cod:
Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Rezultat: Salut lume
4. Comutați cu parametru fișier
Puteți furniza o cale de fișier direct la comutator ca parametru. Puteți utiliza File cu o cale către un fișier în loc să-i dați o expresie variabilă.
Cod:
Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)
ieşire:
Puteți utiliza $ PSItem sau $ _ pentru a lucra cu Articole curente.
5. Comutați cu parametrul CaseSensitive
Când utilizați un parametru Caseensitive într-un comutator, atunci condiția trebuie să corespundă exact fiecărui caracter.
Cod:
switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)
Rezultat: Aceasta nu este potrivită
6. Trecerea valorii Array pentru a comuta funcția
Simplu Array:
switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)
ieşire:
Zece
Doisprezece
Trecerea obiectului Array
Cod:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)
ieşire:
Operațiunea Ștergere VM
VM operație de creare
7. Starea de pauză
Când specificați condiția de pauză, Operația se întrerupe în bucla respectivă și nu poate continua execuția ulterioară. Acest lucru este destul de util atunci când nu doriți să verificați pași suplimentari atunci când condiția se satisface și timpul de execuție devine mai rapid.
Cod:
$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
)
)
ieşire:
Operațiunea Ștergere VM
Dacă observați, există un singur bloc executat și atunci acesta iese din funcția de comutare.
8. Continuați starea
Parametrul Continuă este folosit pentru a omite iterația particulară. De exemplu, dacă există 3 elemente care trebuie să se potrivească, aceasta se va executa mai întâi și atunci când condiția se potrivește, va omite alte etape și va trece la pasul următor.
Cod:
switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)
Ieșire: primul bloc se execută
După cum puteți vedea, a trecut un singur argument („Hello”), acesta execută primul bloc doar pentru că expresia se potrivește și nu mai rămâne un alt argument de executat, scriptul se va încheia.
- Un alt exemplu mixt de pauză și continuă cu Switch.
Cod:
switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)
ieşire:
Primul bloc execută
Al doilea bloc execută
Concluzie
În total, comutatorul este mult mai bun decât punerea în aplicare a mai multor condiții If și oferă mai multă funcționalitate și reducerea timpului de execuție.
Articole recomandate
Acesta a fost un ghid pentru Switch Case în PowerShell. Aici vom discuta, de asemenea, sintaxa, parametrii și exemple de case switch în Powershell. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe-
- Ce este Shell Scripting?
- Comenzi PowerShell
- Operatori PowerShell
- Utilizări de Powershell
- Ghid pentru Array în PowerShell cu exemple