Introduzione al caso S witch in PowerShell

La funzione di commutazione in PowerShell viene utilizzata per gestire più istruzioni If o in altri termini è la sostituzione di più condizioni If / Else If / Else. Per verificare una singola condizione in Script o Funzione, è possibile utilizzare l'istruzione If / else ma se si desidera valutare più istruzioni IF, utilizzare Switch.

Il passaggio è migliore rispetto a più istruzioni If e facile da implementare e semplice utilizzo per la codifica. Esistono più condizioni in ciascuna istruzione e quando una di esse soddisfa, viene eseguita l'azione.

Sintassi:

Switch ()
(
(Action1)
(Action2)
)

Sintassi completa:

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

O

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

Parametri di Switch Case in PowerShell

  • Regex : si chiama anche espressione regolare. Esegue il controllo delle espressioni regolari rispetto al valore della condizione. Se si utilizza Regex, WildCard ed Exacts vengono ignorati. Inoltre, se la clausola match non è una stringa, questo parametro viene ignorato.
  • Carattere jolly : indica che la condizione è una stringa di caratteri jolly. Se si utilizzano i caratteri jolly, Regex ed Exacts vengono ignorati. Inoltre, se la clausola match non è una stringa, questo parametro viene ignorato.
  • Esatto : esegue la corrispondenza con la stringa esatta. Se si utilizza Exact, Wildcard e Regex vengono ignorati e se la clausola match non è una stringa, questo parametro viene ignorato.
  • CaseSensitive: questo parametro controlla la condizione che corrisponde esattamente al valore passato (case sensitive) se non corrisponde, questo parametro viene ignorato. Inoltre ha bisogno di un valore di stringa.
  • File : accetta il percorso del file come valore di input anziché come valore di stringa. Se vengono passati più parametri di file, richiede solo l'ultimo. Ogni riga del file viene letta e valutata rispetto alla condizione e se la condizione corrisponde, esegue quel valore o visualizza un messaggio scritto.

Diagramma di flusso

Come funziona switch in PowerShell?

Come mostrato sopra nel diagramma, ogni volta che viene passato qualsiasi valore (stringa, numero intero, float o altri tipi di dati), array, caratteri jolly, file, ecc., Inizia a confrontare le condizioni una per una e quando la condizione corrisponde, lo script esegue quel blocco . Per più valori di corrispondenza, verrà eseguito il blocco di più script e se non viene trovato alcun valore di corrispondenza e se viene specificata una condizione predefinita, esegue quel blocco altrimenti non verrà generato alcun valore.

Esempi di Switch Case in PowerShell

Vediamo l'esempio dato:

Esempio 1

1. Funzione switch semplice con stringa, valore intero passato.

Codice:

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

Uscita: tre

Codice:

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

Output: dati eseguiti

Ora, cosa succede se il parametro non corrisponde all'espressione. Come esempio riportato di seguito, 5 non corrisponde a nessuno dei casi Switch. In questo caso, l'output sarà nullo.

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

Per ovviare al problema sopra riportato, è necessario specificare il valore predefinito e il blocco predefinito viene eseguito quando nessuno dei parametri corrisponde.

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

Uscita: nessuna corrispondenza trovata

Esempio n. 2

Vediamo l'esempio dato:

Differenza tra if / else if / else e Switch. Dall'esempio seguente, puoi capire come è facile scrivere uno script con la funzione 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")
)

Uscita: sono le 3

Tempo di esecuzione per entrambi i metodi.

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

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

TotalMilliseconds: 25.6802

Differenza: 13, 4614 millisecondi

Questa differenza diventa enorme quando si scrivono script o funzioni enormi all'interno dello switch.

1. Passare con il parametro Regex

Se Regex viene menzionato nello switch, valuta l'espressione con valore passato e se parte della condizione corrisponde quindi esegue quell'operazione.

Considera l'esempio di seguito.

Codice:

Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Output: non viene menzionato nulla

Dopo aver aggiunto Regex.

Codice:

Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Output : Donkey è menzionato

L'asino è menzionato di nuovo

2. Passa con il parametro jolly

Il carattere jolly funziona in modo simile al parametro Like.

Codice:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)

Uscita: errore WMI

3. Passa con parametro esatto

La funzione esatta è predefinita in Switch. Non importa se lo usi o meno. Ma quando si utilizzano due parametri contemporaneamente, l'ultimo parametro ha la precedenza.

Codice:

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

Uscita: nessun mondo

Codice:

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

Uscita: Hello World

4. Passa al parametro File

È possibile fornire un percorso di file direttamente allo Switch come parametro. È possibile utilizzare File con un percorso a un file invece di dargli un'espressione variabile.

Codice:

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

Produzione:

Puoi usare $ PSItem o $ _ per lavorare con gli oggetti correnti.

5. Passare al parametro CaseSensitive

Quando si utilizza un parametro Casesensitive in un interruttore, la condizione deve corrispondere esattamente a ciascun carattere.

Codice:

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

Output: non corrisponde

6. Passaggio del valore dell'array per cambiare funzione

Matrice semplice:

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

Produzione:

Dieci

Dodici

Passare l'oggetto array

Codice:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)

Produzione:

Operazione di eliminazione VM

Operazione di creazione VM

7. Condizioni di rottura

Quando si specifica la condizione di interruzione, l'operazione si interrompe in quel ciclo e non può continuare l'ulteriore esecuzione. Questo è piuttosto utile quando non si desidera controllare ulteriori passaggi quando la condizione soddisfa e il tempo di esecuzione diventa più veloce.

Codice:

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

Produzione:

Operazione di eliminazione VM

Se noti, c'è un solo blocco eseguito e quindi esce dalla funzione switch.

8. Continua condizioni

Il parametro Continua viene utilizzato per saltare la particolare iterazione. Ad esempio, se ci sono 3 elementi da abbinare, verrà eseguito per primo e quando la condizione corrisponde, salterà altri passaggi e passerà al passaggio successivo.

Codice:

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

Output: viene eseguito il primo blocco

Come puoi vedere c'è solo un argomento passato ('Hello'), esegue il primo blocco solo perché l'espressione corrisponde e non c'è altro argomento da eseguire, lo script finirà.

  • Un altro esempio misto di interruzione e continua con Switch.

Codice:

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

Produzione:

Viene eseguito il primo blocco

Viene eseguito il secondo blocco

Conclusione

Tutto sommato, Switch è molto meglio dell'implementazione di più condizioni If e offre più funzionalità e riduzione dei tempi di esecuzione.

Articoli consigliati

Questa è stata una guida a Switch Case in PowerShell. Qui discutiamo anche la sintassi, i parametri e gli esempi di switch case in Powershell. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più-

  1. Che cos'è Shell Scripting?
  2. Comandi PowerShell
  3. Operatori PowerShell
  4. Usi di Powershell
  5. Guida all'array in PowerShell con esempi

Categoria: