Compartilhar via


Sobre o Switch

DESCRIÇÃO BREVE

Explica como usar uma opção para manipular várias instruções If.

DESCRIÇÃO LONGA

Para marcar uma condição em um script ou função, use uma instrução If . A If instrução pode marcar muitos tipos de condições, incluindo o valor de variáveis e as propriedades dos objetos.

Para marcar várias condições, use uma Switch instrução . A Switch instrução é equivalente a uma série de instruções If, mas é mais simples. A Switch instrução lista cada condição e uma ação opcional. Se uma condição for obtida, a ação será executada.

A Switch instrução também usa a $switch variável automática. Para obter mais informações, confira about_Automatic_Variables.

Uma instrução básica Switch tem o seguinte formato:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Por exemplo, a instrução a seguir Switch compara o valor de teste, 3, com cada uma das condições. Quando o valor de teste corresponde à condição, a ação é executada.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

Neste exemplo simples, o valor é comparado a cada condição na lista, mesmo que haja uma correspondência para o valor 3. A instrução a seguir Switch tem duas condições para um valor de 3. Ele demonstra que, por padrão, todas as condições são testadas.

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.

Para direcionar o Switch para parar de comparar após uma correspondência, use a Break instrução . A Break instrução encerra a Switch instrução .

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 o valor de teste for uma coleção, como uma matriz, cada item na coleção será avaliado na ordem em que ele aparece. Os exemplos a seguir avaliam 4 e, em seguida, 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.

Todas Break as instruções se aplicam à coleção, não a cada valor, conforme mostrado no exemplo a seguir. A Switch instrução é encerrada pela instrução Break na condição do valor 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.

Syntax

A sintaxe completa Switch da instrução é a seguinte:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

ou

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Se nenhum parâmetro for usado, Switch executará uma correspondência exata que não diferencia maiúsculas de minúsculas para o valor. Se o valor for uma coleção, cada elemento será avaliado na ordem em que ele aparece.

A Switch instrução deve incluir pelo menos uma instrução de condição.

A Default cláusula é disparada quando o valor não corresponde a nenhuma das condições. É equivalente a uma Else cláusula em uma instrução If . Somente uma Default cláusula é permitida em cada Switch instrução.

Switch tem os seguintes parâmetros:

Parâmetro Descrição
Curinga Indica que a condição é uma cadeia de caracteres curinga.
Se a cláusula match não for uma cadeia de caracteres, o parâmetro será
Ignorado.
Exato Indica que a cláusula match, se for uma cadeia de caracteres, deve
correspondem exatamente. Se a cláusula match não for uma cadeia de caracteres, esse parâmetro
é ignorado.
CaseSensitive Executa uma correspondência que diferencia maiúsculas de minúsculas. Se a cláusula match não for
uma cadeia de caracteres, esse parâmetro é ignorado.
Arquivo Obtém a entrada de um arquivo em vez de uma instrução value. If
vários parâmetros de arquivo estão incluídos, apenas o último é
usados. Cada linha do arquivo é lida e avaliada pelo
Instrução Switch.
Regex Executa a correspondência de expressões regulares do valor com o
condition. Se a opção
A cláusula match não é uma cadeia de caracteres, esse parâmetro é ignorado.

Observação

Ao especificar valores conflitantes, como Regex e Curinga, o último parâmetro especificado tem precedência e todos os parâmetros conflitantes são ignorados. Várias instâncias de parâmetros também são permitidas. No entanto, somente o último parâmetro usado é eficaz.

Neste exemplo, não há nenhum caso correspondente, portanto, não há saída.

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."}
}

Ao adicionar a Default cláusula , você pode executar uma ação quando nenhuma outra condição for bem-sucedida.

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

Para que a palavra "quatorze" corresponda a um caso, você deve usar o -Wildcard parâmetro ou -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.

O exemplo a seguir usa o -Regex parâmetro .

$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

Uma Switch condição de instrução pode ser:

  • Uma expressão cujo valor é comparado com o valor de entrada
  • Um bloco de script que deve retornar $true se uma condição for atendida. O bloco de script recebe o objeto atual a ser comparado na $_ variável automática e é avaliado em seu próprio escopo.

A ação para cada condição é independente das ações em outras condições.

O exemplo a seguir demonstra o uso de blocos de script como Switch condições de instrução.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

Se o valor corresponder a várias condições, a ação para cada condição será executada. Para alterar esse comportamento, use as Break palavras-chave ou Continue .

O Break palavra-chave interrompe o processamento e sai da Switch instrução .

O Continue palavra-chave para de processar o valor atual, mas continua processando os valores subsequentes.

O exemplo a seguir processa uma matriz de números e exibe se eles são ímpares ou até mesmo. Números negativos são ignorados com o Continue palavra-chave. Se um não número for encontrado, a execução será encerrada com o Break palavra-chave.

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

CONSULTE TAMBÉM

about_Break

about_Continue

about_If

about_Script_Blocks