Introducción al caso de bruja S en PowerShell

La función de cambio en PowerShell se usa para manejar múltiples declaraciones If o, en otros términos, es el reemplazo de múltiples condiciones If / Else If / Else. Para verificar una sola condición en Script o Función, puede usar la instrucción If / else, pero si desea evaluar más instrucciones IF, use Switch.

Switch es mejor en comparación con múltiples declaraciones If y fácil de implementar y de uso simple para la codificación. Hay varias condiciones bajo cada declaración y cuando una de ellas satisface, la acción se realiza.

Sintaxis:

Switch ()
(
(Action1)
(Action2)
)

Sintaxis completa:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

O

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Parámetros de la caja del interruptor en PowerShell

  • Regex : También se llama expresión regular. Realiza la comprobación de expresión regular contra el valor de la condición. Si usa Regex, WildCard y Exacts se ignoran. Además, si la cláusula de coincidencia no es una cadena, este parámetro se ignora.
  • Comodín : indica que la condición es una cadena comodín. Si utiliza comodines, expresiones regulares y exactos se ignoran. Además, si la cláusula de coincidencia no es una cadena, este parámetro se ignora.
  • Exacto : realiza la coincidencia con la cadena exacta. Si usa Exact, Wildcard y Regex se ignoran y si la cláusula de coincidencia no es una cadena, este parámetro se ignora.
  • CaseSensitive: este parámetro verificará la condición que coincide exactamente con el valor pasado ( distingue entre mayúsculas y minúsculas) si no coincide, este parámetro se ignora. También necesita un valor de cadena.
  • Archivo : toma la ruta del archivo como un valor de entrada en lugar de un valor de cadena. Si se pasan varios parámetros de archivo, solo se necesita el último. Cada línea del archivo se lee y evalúa según la condición y si la condición coincide, entonces ejecuta ese valor o muestra un mensaje escrito.

Diagrama de flujo

¿Cómo funciona el interruptor en PowerShell?

Como se muestra en el diagrama anterior, cada vez que se pasa cualquier valor (cadena, entero, flotante u otros tipos de datos), matriz, comodines, archivos, etc., comienza a coincidir las condiciones una por una y cuando la condición coincide, el script ejecuta ese bloque . Para múltiples valores coincidentes, se ejecutará un bloque de scripts múltiples y si no se encuentra ningún valor coincidente y si se especifica la condición predeterminada, entonces ejecuta ese bloque, de lo contrario, hay una salida nula.

Ejemplos de casos de conmutadores en PowerShell

Veamos el ejemplo dado:

Ejemplo 1

1. Función de interruptor simple con cadena, valor entero pasado.

Código:

switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)

Salida: tres

Código:

switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)

Salida: datos ejecutados

Ahora, ¿qué pasa si el parámetro no coincide con la expresión? Como ejemplo a continuación, 5 no coincide con ninguno de los casos de Switch. En este caso, la salida será nula.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)

Para superar el problema anterior, el valor predeterminado debe especificarse y el bloque predeterminado se ejecuta cuando ninguno de los parámetros coincide.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)

Salida: No se encontraron coincidencias

Ejemplo # 2

Veamos el ejemplo dado:

Diferencia entre if / else if / else y Switch. En el ejemplo a continuación, puede comprender cómo es fácil escribir un script con la función 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")
)

Salida: son las 3 en punto

Tiempo de ejecución para ambos 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 Milisegundos: 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 de milisegundos: 25.6802

Diferencia: 13.4614 milisegundos

Esta diferencia se vuelve enorme cuando escribes scripts o funciones masivas dentro del conmutador.

1. Cambiar con el parámetro Regex

Si se menciona Regex en el conmutador, evalúa la expresión con el valor pasado y si parte de la condición coincide, entonces ejecuta esa operación.

Considere el siguiente ejemplo.

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")
)

Salida: nada se menciona

Después de agregar 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")
)

Salida : se menciona el burro

Burro se menciona de nuevo

2. Cambiar con el parámetro comodín

El comodín funciona de manera similar al parámetro Me gusta.

Código:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)

Salida: error de WMI

3. Cambiar con el parámetro exacto

La función exacta es la predeterminada en Switch. No importa si lo usas o no. Pero cuando usa dos parámetros al mismo tiempo, el último parámetro tiene prioridad.

Código:

Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Salida: No World

Código:

Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Salida: Hola mundo

4. Cambiar con el parámetro de archivo

Puede proporcionar una ruta de archivo directamente al Switch como parámetro. Puede usar Archivo con una ruta a un archivo en lugar de darle una expresión variable.

Código:

Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)

Salida:

Puede usar $ PSItem o $ _ para trabajar con elementos actuales.

5. Cambiar con el parámetro CaseSensitive

Cuando utiliza un parámetro Casesensitive en un interruptor, la condición debe coincidir exactamente con cada carácter.

Código:

switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)

Salida: esto no coincide

6. Pasar valor de matriz para cambiar de función

Matriz simple:

switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)

Salida:

Diez

Doce

Pasar objeto de matriz

Código:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)

Salida:

Operación de eliminación de VM

Operación de creación de VM

7. Condición de ruptura

Cuando especifica la condición de interrupción, Operation se interrumpe en ese bucle y no puede continuar con la ejecución. Esto es bastante útil cuando no desea verificar más pasos cuando la condición satisface y el tiempo de ejecución se vuelve más 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
)
)

Salida:

Operación de eliminación de VM

Si observa, solo hay un bloque ejecutado y luego sale de la función de cambio.

8. Continuar condición

El parámetro Continuar se usa para omitir la iteración particular. Por ejemplo, si hay 3 elementos que coinciden, se ejecutará primero y cuando la condición coincida, saltará otros pasos y pasará al siguiente.

Código:

switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)

Salida: primer bloque se ejecuta

Como puede ver, solo se pasa un argumento ('Hola'), ejecuta el primer bloque solo porque la expresión coincide y no hay otro argumento que ejecutar, el script finalizará.

  • Un ejemplo más mixto de descanso y continuar con Switch.

Código:

switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)

Salida:

El primer bloque se ejecuta

El segundo bloque se ejecuta

Conclusión

Con todo, Switch es mucho mejor que implementar múltiples condiciones If y proporciona más funcionalidad y reducción en el tiempo de ejecución.

Artículos recomendados

Esta ha sido una guía para Switch Case en PowerShell. Aquí también discutimos la sintaxis, los parámetros y los ejemplos de casos de cambio en Powershell. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. ¿Qué son las secuencias de comandos de Shell?
  2. Comandos de PowerShell
  3. Operadores de PowerShell
  4. Usos de Powershell
  5. Guía de matriz en PowerShell con ejemplos

Categoría: