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-

  1. Ce este Shell Scripting?
  2. Comenzi PowerShell
  3. Operatori PowerShell
  4. Utilizări de Powershell
  5. Ghid pentru Array în PowerShell cu exemple

Categorie: