Por lo general, se usa una construcción if-else para probar las condiciones en los scripts de PowerShell. Si necesita verificar inmediatamente varias condiciones en lugar de hacer construcciones complejas con if-else, es mucho más fácil usar el cambiar declaración.
La sintaxis de la construcción con el Cambiar El operador se parece a lo siguiente:
Switch -options (value) {
Pattern 1 {action1}
Pattern 2 {action2}
Pattern x {action3}
default { defaultaction}}
La instrucción Switch compara el valor de cada elemento a su vez con cada condición (patrón) y, si coincide, realiza la acción especificada para esta condición.
PowerShell: Operador de interruptores
Veamos un ejemplo de un script de PowerShell simple que compara el valor de la variable var1 con uno de los siguientes valores.
$var1 = 2
Switch ($var1) {
1 {write-host ″Action one″}
2 {write-host ″Action two″}
3 {write-host ″Action three″}
}
En este ejemplo, el valor de la variable var1 coincide con la segunda condición, por lo que se muestra la ″Acción dos″.
En el ejemplo anterior, si el valor de $var1 = 0, la instrucción Switch no realiza ninguna acción. Puede crear una acción predeterminada que se aplique cuando no se cumpla ninguna de las condiciones. Para hacer esto, use el Defecto llave.
$var1 = 0
Switch ($var1) {
1 {write-host ″Action one″}
2 {write-host ″Action two″}
3 {write-host ″Action three″}
Default {″No action″; exit}
}
La instrucción Switch verifica secuencialmente todas las condiciones. Si después de una coincidencia con una condición desea abandonar la estructura Cambiar, use el Romper operador.
Por ejemplo:
1 {write-host ″Action one″;break}
Puede verificar el valor de un determinado objeto usando la instrucción Switch. Por ejemplo, verifique el estado del servicio del Cliente DNS usando el cmdlet Obtener servicio, y si el servicio se detiene, lo iniciaremos. Si el servicio está en estado Detenido, el script lo reiniciará (deja que sea la acción predeterminada).
switch (Get-Service | where {$_.name -eq 'Dnscache'})
{
{$_.status -eq 'Running'} {'DNS client service is running'}
{$_.status -eq 'Stopped'} {'DNS client service is stopped'; Start-Service Dnscache }
Default { Restart-Service Dnscache; {'DNS client service restarting' }; exit}
}
Una de las características más útiles de la instrucción switch es la capacidad integrada de trabajar con expresiones regulares con la tecla -regexp.
Por ejemplo, usando una expresión regular, puede verificar que la siguiente línea comience o termine con un carácter específico:
switch -regex ("theitbros")
{
'^t' { "Begins with t" }
's$' { "ends with s" }
'^a' { "Begins with a" }
}
Begins with t
ends with s

También en los scripts, los siguientes parámetros de declaración de cambio de PowerShell pueden ser útiles:
- Comodín — puede utilizar comodines en la expresión (*,?, [asd]);
- Exacto — comparación exacta, insensible a mayúsculas y minúsculas, de la cadena;
- Distingue mayúsculas y minúsculas — la verificación de mayúsculas y minúsculas (si la condición no es una cadena, este parámetro se ignora);
- Archivo — los datos de entrada se toman de un archivo. Por ejemplo:
switch -file c:pstest.txt
{
'cat' {write-host 'I found a cat'}
'dog' { write-host 'I found a dog'}
'bird'{ write-host 'I found a bird'}
Default {write-host ‘nothing found’}
}
