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:

  1. O que é Shell Scripting?
  2. Comandos do PowerShell
  3. Operadores do PowerShell
  4. Usos do PowerShell
  5. Guia de matriz no PowerShell com exemplos

Categoria: