Esaminare e usare il costrutto Switch negli script di Windows PowerShell

Completato

Il costrutto Switch è simile a un costrutto If con più sezioni ElseIf. Il costrutto Switch valuta una singola variabile o un singolo elemento rispetto a più valori e includo un blocco di script per ogni valore. Il blocco di script relativo a ciascun valore viene eseguito se tale valore corrisponde alla variabile. È inoltre presente una sezione Predefinita che viene eseguita solo se non vengono rilevate corrispondenze.

Il costrutto Switch usa la sintassi seguente:

Switch ($choice) {
   1 { Write-Host "You selected menu item 1" }
   2 { Write-Host "You selected menu item 2" }
   3 { Write-Host "You selected menu item 3" }
   Default { Write-Host "You did not select a valid option" }
}

Il costrutto Switch può essere utilizzato non solo per le corrispondenze dei valori, ma anche per i criteri di corrispondenza. È possibile usare il parametro -wildcard per eseguire la corrispondenza di modello con la stessa sintassi dell'operatore -like. In alternativa, per eseguire i criteri di ricerca è possibile avvalersi del parametro -regex, usando espressioni regolari.

È importante tenere presente che, quando si utilizzano i criteri di corrispondenza, sono possibili più corrispondenze. Se sono presenti più corrispondenze, vengono eseguiti i blocchi di script per tutti i modelli corrispondenti. Questa modalità è diversa da quella di un costrutto If in cui viene eseguito un unico blocco di script.

Nell'esempio che segue vengono utilizzati i criteri di corrispondenza:

Switch -WildCard ($ip) {
   "10.*" { Write-Host "This computer is on the internal network" }
   "10.1.*" { Write-Host "This computer is in London" }
   "10.2.*" { Write-Host "This computer is in Vancouver" }
   Default { Write-Host "This computer is not on the internal network" }
 }

Per i valori di $ip inclusi nelle reti di Londra o Vancouver, verranno visualizzati due messaggi. Se $ip include un indirizzo IP nella rete 10.x.x.x.x, i messaggi indicheranno che il computer si trova nella rete interna, a Londra o a Vancouver. Se $ip non è un indirizzo IP incluso nella rete 10.x.x.x.x, il messaggio indicherà che il computer non si trova nella rete interna.

Se si specificano più valori in una matrice per un costrutto Switch, verrà valutato ogni elemento della matrice. In riferimento all'esempio riportato sopra, se la variabile $ip fosse stata una matrice contenente due indirizzi IP, sarebbero stati valutati entrambi gli indirizzi IP. Sarebbero quindi state eseguite le azioni appropriate per ogni elemento nella matrice.