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