Introdução ao caso S witch no PowerShell
A função de alternância no PowerShell é usada para manipular várias instruções If ou, em outros termos, é a substituição de várias condições If / Else If / Else. Para verificar uma única condição no Script ou Function, você pode usar a instrução If / else, mas se desejar avaliar mais instruções IF, use Switch.
O switch é melhor comparado a várias instruções If e fácil de implementar e simples de codificar. Existem várias condições em cada instrução e quando uma delas satisfaz, a ação é executada.
Sintaxe:
Switch ()
(
(Action1)
(Action2)
)
Sintaxe completa:
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
OU
Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)
Parâmetros da caixa do comutador no PowerShell
- Regex : É também chamado de Expressão Regular. Executa a verificação de expressão regular em relação ao valor da condição. Se você usar Regex, WildCard e Exacts serão ignorados. Além disso, se a cláusula de correspondência não for uma sequência, esse parâmetro será ignorado.
- Curinga : indica que a condição é uma sequência de caracteres curinga. Se você usar curinga, Regex e exato, serão ignorados. Além disso, se a cláusula de correspondência não for uma sequência, esse parâmetro será ignorado.
- Exato : Executa a correspondência com a sequência exata. Se você usar Exato, Curinga e Regex serão ignorados e se a cláusula de correspondência não for uma sequência, esse parâmetro será ignorado.
- CaseSensitive: Este parâmetro verificará a condição que corresponde exatamente ao Valor passado ( diferencia maiúsculas de minúsculas) se não corresponder, pois esse parâmetro será ignorado. Ele também precisa de um valor de sequência.
- Arquivo : assume o caminho do arquivo como um valor de entrada, e não como um valor de sequência. Se vários parâmetros de arquivo forem passados, será necessário apenas o último. Cada linha do arquivo é lida e avaliada em relação à condição e, se a condição corresponder, ele executa esse valor ou exibe uma mensagem escrita.
Fluxograma
Como a opção funciona no PowerShell?
Como mostrado acima no diagrama, sempre que qualquer valor (string, Inteiro, flutuante ou outros tipos de dados), matriz, curingas, arquivos etc. é passado, ele inicia a correspondência das condições uma a uma e, quando a condição corresponde, o script executa esse bloco . Para vários valores correspondentes, vários blocos de scripts serão executados e, se nenhum valor correspondente for encontrado e se a condição padrão for especificada, ele executará esse bloco, caso contrário, haverá saída nula.
Exemplos de maiúsculas e minúsculas no PowerShell
Vamos ver o exemplo dado:
Exemplo 1
1. Função de comutação simples com string, valor inteiro passado.
Código:
switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)
Saída: Três
Código:
switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)
Saída: Dados Executados
Agora, e se o parâmetro não corresponder à expressão. Como exemplo dado abaixo, 5 não corresponde a nenhum dos casos do Switch. Nesse caso, a saída será nula.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)
Para superar o problema acima, o padrão precisa especificar e o bloco padrão é executado quando nenhum dos parâmetros corresponde.
switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)
Saída: Nenhuma correspondência encontrada
Exemplo 2
Vamos ver o exemplo dado:
Diferença entre if / else if / else e Switch. No exemplo abaixo, você pode entender como é fácil escrever um script com a função Switch.
$time = 3
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")
$time = 3
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)
Saída: são 3 horas
Tempo de execução para ambos os métodos.
$time = 3
Measure-Command (
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")
)
Total em milissegundos: 39.1416
$time = 3
Measure-Command (
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)
)
Total em milissegundos: 25.6802
Diferença: 13, 4614 milissegundos
Essa diferença se torna grande quando você escreve scripts ou funções em massa dentro do switch.
1. Alterne com o parâmetro Regex
Se Regex for mencionado na opção, ele avaliará a expressão com valor passado e, se parte da condição corresponder, executará essa operação.
Considere o exemplo abaixo.
Código:
Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)
Saída: Nada é mencionado
Depois de adicionar o Regex.
Código:
Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)
Saída : O burro é mencionado
Burro é mencionado novamente
2. Alterne com o parâmetro curinga
O curinga funciona de maneira semelhante ao parâmetro Like.
Código:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)
Saída: Erro WMI
3. Alterne com o parâmetro exato
A função exata é o padrão no Switch. Não importa se você o usa ou não. Mas quando você usa dois parâmetros ao mesmo tempo, o último parâmetro tem precedência.
Código:
Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Saída: No World
Código:
Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)
Saída: Olá Mundo
4. Alterne com o parâmetro File
Você pode fornecer um caminho de arquivo diretamente para o Switch como um parâmetro. Você pode usar o arquivo com um caminho para um arquivo em vez de fornecer uma expressão variável.
Código:
Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)
Resultado:
Você pode usar $ PSItem ou $ _ para trabalhar com itens atuais.
5. Alterne com o parâmetro CaseSensitive
Quando você usa um parâmetro Casesensitive em uma opção, a condição deve corresponder exatamente a cada caractere.
Código:
switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)
Saída: isso não está correspondendo
6. Passando o valor da matriz para mudar de função
Matriz simples:
switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)
Resultado:
Dez
Doze
Objeto de matriz de passagem
Código:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)
Resultado:
Operação de exclusão da VM
Operação de criação de VM
7. Condição de interrupção
Quando você especifica a condição de interrupção, a Operação interrompe esse loop e não pode continuar com a execução. Isso é bastante útil quando você não deseja verificar outras etapas quando a condição é satisfatória e o tempo de execução se torna mais rápido.
Código:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" (
"VM Delete Operation"
break )
"VM_Create" (
"VM Create Operation"
break)
"VM_Shutdown" (
"VM Shutdown Operation"
break
)
)
Resultado:
Operação de exclusão da VM
Se você notar, existe apenas um bloco executado e, em seguida, ele sai da função de chave.
8. Continue Condição
O parâmetro Continue é usado para ignorar a iteração específica. Por exemplo, se houver três itens para corresponder, ele será executado primeiro e, quando a condição corresponder, pulará outras etapas e passará para a próxima etapa.
Código:
switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)
Saída: Execuções do Primeiro Bloco
Como você pode ver, há apenas um argumento passado ('Hello'); ele executa o primeiro bloco apenas porque a expressão está correspondendo e não há outro argumento a ser executado; o script será encerrado.
- Mais um exemplo misto de interrupção e continue com o Switch.
Código:
switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)
Resultado:
Execuções do primeiro bloco
Segundo bloco executado
Conclusão
Em resumo, o Switch é muito melhor do que implementar várias condições If e fornece mais funcionalidade e redução no tempo de execução.
Artigos recomendados
Este foi um guia para alternar entre maiúsculas e minúsculas no PowerShell. Aqui também discutimos a sintaxe, parâmetros e exemplos de casos de comutação no Powershell. Você também pode dar uma olhada nos seguintes artigos para saber mais:
- O que é Shell Scripting?
- Comandos do PowerShell
- Operadores do PowerShell
- Usos do PowerShell
- Guia de matriz no PowerShell com exemplos