Informazioni su Switch
DESCRIZIONE BREVE
Illustra come usare un commutatore per gestire più istruzioni If.
DESCRIZIONE LUNGA
Per controllare una condizione in uno script o in una funzione, usare un'istruzione If
. L'istruzione If
può controllare molti tipi di condizioni, tra cui il valore delle variabili e le proprietà degli oggetti.
Per controllare più condizioni, usare un'istruzione Switch
. L'istruzione Switch
equivale a una serie di istruzioni If, ma è più semplice. L'istruzione Switch
elenca ogni condizione e un'azione facoltativa. Se viene ottenuta una condizione, viene eseguita l'azione.
L'istruzione Switch
usa anche la $switch
variabile automatica. Per altre informazioni, vedere about_Automatic_Variables.
Un'istruzione di base Switch
ha il formato seguente:
Switch (<test-value>)
{
<condition> {<action>}
<condition> {<action>}
}
Ad esempio, l'istruzione seguente Switch
confronta il valore di test, 3, a ognuna delle condizioni. Quando il valore di test corrisponde alla condizione, viene eseguita l'azione.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
In questo semplice esempio, il valore viene confrontato con ogni condizione nell'elenco, anche se esiste una corrispondenza per il valore 3. L'istruzione seguente Switch
presenta due condizioni per un valore pari a 3. Viene dimostrato che, per impostazione predefinita, tutte le condizioni vengono testate.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Three again.
Per indirizzare l'oggetto per interrompere il Switch
confronto dopo una corrispondenza, usare l'istruzione Break
. L'istruzione Break
termina l'istruzione Switch
.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."; Break}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Se il valore di test è una raccolta, ad esempio una matrice, ogni elemento della raccolta viene valutato nell'ordine in cui viene visualizzato. Gli esempi seguenti valutano 4 e quindi 2.
switch (4, 2)
{
1 {"It is one." }
2 {"It is two." }
3 {"It is three." }
4 {"It is four." }
3 {"Three again."}
}
It is four.
It is two.
Tutte Break
le istruzioni si applicano alla raccolta, non a ogni valore, come illustrato nell'esempio seguente. L'istruzione Switch
viene terminata dall'istruzione Break
nella condizione del valore 4.
switch (4, 2)
{
1 {"It is one."; Break}
2 {"It is two." ; Break }
3 {"It is three." ; Break }
4 {"It is four." ; Break }
3 {"Three again."}
}
It is four.
Sintassi
La sintassi completa Switch
dell'istruzione è la seguente:
switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
oppure
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
Se non vengono usati parametri, Switch
esegue una corrispondenza esatta senza distinzione tra maiuscole e minuscole per il valore. Se il valore è una raccolta, ogni elemento viene valutato nell'ordine in cui viene visualizzato.
L'istruzione Switch
deve includere almeno un'istruzione condition.
La Default
clausola viene attivata quando il valore non corrisponde a nessuna delle condizioni. Equivale a una Else
clausola in un'istruzione If
. In ogni Switch
istruzione è consentita una Default
sola clausola.
Switch
include i parametri seguenti:
Parametro | Descrizione |
---|---|
Carattere jolly | Indica che la condizione è una stringa con caratteri jolly. |
Se la clausola match non è una stringa, il parametro è | |
Ignorato. | |
Exact | Indica che la clausola match, se è una stringa, deve |
corrisponde esattamente. Se la clausola match non è una stringa, questo parametro | |
viene ignorato. | |
CaseSensitive | Esegue una corrispondenza con distinzione tra maiuscole e minuscole. Se la clausola match non è |
stringa, questo parametro viene ignorato. | |
File | Accetta l'input da un file anziché da un'istruzione value. Se |
sono inclusi più parametri file , solo l'ultimo è | |
Utilizzato. Ogni riga del file viene letto e valutato dall'oggetto | |
Switch affermazione. |
|
Regex | Esegue la corrispondenza dell'espressione regolare del valore all'oggetto |
condition. Se il parametro | |
la clausola match non è una stringa, questo parametro viene ignorato. |
Nota
Quando si specificano valori in conflitto, ad esempio Regex e Jolly, l'ultimo parametro specificato ha la precedenza e tutti i parametri in conflitto vengono ignorati. Sono consentite anche più istanze di parametri. Tuttavia, solo l'ultimo parametro usato è effettivo.
In questo esempio non esiste alcun caso corrispondente in modo che non vi sia alcun output.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
Aggiungendo la Default
clausola, è possibile eseguire un'azione quando non sono state eseguite altre condizioni.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
Default {
"No matches"
}
}
No matches
Per la parola "quattordici" per corrispondere a un caso è necessario usare il -Wildcard
parametro o -Regex
.
PS> switch -Wildcard ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
That's too many.
Nell'esempio seguente viene usato il -Regex
parametro .
$target = 'user@contoso.com'
switch -Regex ($target)
{
'ftp\://.*' { "$_ is an ftp address"; Break }
'\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address
Una Switch
condizione di istruzione può essere:
- Espressione il cui valore viene confrontato con il valore di input
- Blocco di script che deve restituire
$true
se viene soddisfatta una condizione. Il blocco di script riceve l'oggetto$_
corrente da confrontare nella variabile automatica e viene valutato nel proprio ambito.
L'azione per ogni condizione è indipendente dalle azioni in altre condizioni.
Nell'esempio seguente viene illustrato l'uso di blocchi di script come Switch
condizioni di istruzione.
switch ("Test")
{
{$_ -is [String]} {
"Found a string"
}
"Test" {
"This executes as well"
}
}
Found a string
This executes as well
Se il valore corrisponde a più condizioni, viene eseguita l'azione per ogni condizione. Per modificare questo comportamento, usare le Break
parole chiave o Continue
.
La Break
parola chiave interrompe l'elaborazione e chiude l'istruzione Switch
.
La Continue
parola chiave interrompe l'elaborazione del valore corrente, ma continua a elaborare i valori successivi.
Nell'esempio seguente viene elaborata una matrice di numeri e viene visualizzata se sono dispari o persino. I numeri negativi vengono ignorati con la Continue
parola chiave. Se viene rilevato un numero diverso da un numero, l'esecuzione viene terminata con la Break
parola chiave.
switch (1,4,-1,3,"Hello",2,1)
{
{$_ -lt 0} { Continue }
{$_ -isnot [Int32]} { Break }
{$_ % 2} {
"$_ is Odd"
}
{-not ($_ % 2)} {
"$_ is Even"
}
}
1 is Odd
4 is Even
3 is Odd