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:
- ¿Qué son las secuencias de comandos de Shell?
- Comandos de PowerShell
- Operadores de PowerShell
- Usos de Powershell
- Guía de matriz en PowerShell con ejemplos