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ù-
- Che cos'è Shell Scripting?
- Comandi PowerShell
- Operatori PowerShell
- Usi di Powershell
- Guida all'array in PowerShell con esempi