Condividi tramite


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

VEDERE ANCHE

about_Break

about_Continue

about_If

about_Script_Blocks