Compartir a través de


Acerca de Switch

DESCRIPCIÓN BREVE

Explica cómo usar un modificador para controlar varias instrucciones If.

DESCRIPCIÓN LARGA

Para comprobar una condición en un script o una función, use una instrucción If. La instrucción If puede comprobar muchos tipos de condiciones, incluido el valor de las variables y las propiedades de los objetos.

Para comprobar varias condiciones, utilice una instrucción Switch. La Switch instrucción es equivalente a una serie de instrucciones If, pero es más simple. La instrucción Switch enumera cada condición y una acción opcional. Si se cumple una condición, se realiza la acción.

La Switch instrucción también utiliza la $switch variable automática. Para obtener más información, consulte sobre_Variables_Automáticas.

Una instrucción Switch básica tiene el siguiente formato:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Por ejemplo, la siguiente Switch instrucción compara el valor de prueba, 3, con cada una de las condiciones. Cuando el valor de prueba coincide con la condición, se realiza la acción.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

En este ejemplo sencillo, el valor se compara con cada condición de la lista, aunque haya una coincidencia para el valor 3. La siguiente instrucción Switch tiene dos condiciones para un valor de 3. Muestra que, de forma predeterminada, se prueban todas las condiciones.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.
Three again.

Para dirigir a Switch que deje de compararse después de una coincidencia, use la Break instrucción . La Break instrucción finaliza la Switch instrucción .

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."; Break}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.

Si el valor de prueba es una colección, como una matriz, cada elemento de la colección se evalúa en el orden en que aparece. En los ejemplos siguientes se evalúan 4 y 2.

switch (4, 2)
{
    1 {"It is one." }
    2 {"It is two." }
    3 {"It is three." }
    4 {"It is four." }
    3 {"Three again."}
}
It is four.
It is two.

Las Break instrucciones se aplican a la colección, no a cada valor, como se muestra en el ejemplo siguiente. La Switch instrucción finaliza mediante la Break instrucción en la condición del valor 4.

switch (4, 2)
{
    1 {"It is one."; Break}
    2 {"It is two." ; Break }
    3 {"It is three." ; Break }
    4 {"It is four." ; Break }
    3 {"Three again."}
}
It is four.

Sintaxis

La sintaxis de instrucción Switch completa es la siguiente:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

o

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Si no se utiliza ningún parámetro, Switch realiza una coincidencia exacta sin distinción entre mayúsculas y minúsculas para el valor. Si el valor es una colección, cada elemento se evalúa en el orden en que aparece.

La instrucción Switch debe incluir al menos una instrucción condition.

La cláusula Default se desencadena cuando el valor no coincide con ninguna de las condiciones. Es equivalente a una cláusula Else en una instrucción If. Solo se permite una cláusula Default en cada instrucción Switch.

Switch tiene los parámetros siguientes:

Parámetro Descripción
Carácter comodín Indica que la condición es una cadena de caracteres comodín.
Si la cláusula match no es una cadena, el parámetro es
Ignorado.
Exacto Indica que la cláusula match, si es una cadena, debe
coincidir exactamente. Si la cláusula match no es una cadena, este parámetro
se ignora.
CaseSensitive Realiza una coincidencia que distingue entre mayúsculas y minúsculas. Si la cláusula match no es
una cadena, este parámetro se ignora.
Archivo Toma la entrada de un archivo en lugar de una instrucción de valor. Si
se incluyen varios parámetros de archivo , solo el último es
usado. Cada línea del archivo es leída y evaluada por el
Switch declaración.
regex Realiza la coincidencia de expresiones regulares del valor con el valor
condición. Si el
match no es una cadena, este parámetro se ignora.

Nota:

Al especificar valores en conflicto, como regex y comodín, el último parámetro especificado tiene prioridad y se omiten todos los parámetros en conflicto. También se permiten varias instancias de parámetros. Sin embargo, solo el último parámetro utilizado es efectivo.

En este ejemplo, no hay ningún caso coincidente, por lo que no hay ninguna salida.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
}

Si agrega la cláusula Default, puede realizar una acción cuando ninguna otra condición se realice correctamente.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
    Default {
        "No matches"
    }
}
No matches

Para que la palabra "catorce" coincida con un caso, debe usar el parámetro -Wildcard o -Regex.

   PS> switch -Wildcard ("fourteen")
       {
           1 {"It is one."; Break}
           2 {"It is two."; Break}
           3 {"It is three."; Break}
           4 {"It is four."; Break}
           "fo*" {"That's too many."}
       }
That's too many.

En el ejemplo siguiente se usa el parámetro -Regex.

$target = 'user@contoso.com'
switch -Regex ($target)
{
    'ftp\://.*' { "$_ is an ftp address"; Break }
    '\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
    'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address

Una Switch condición de instrucción puede ser:

  • Expresión cuyo valor se compara con el valor de entrada
  • Un bloque de script que debe devolverse $true si se cumple una condición. El bloque de script recibe el objeto actual para comparar en la $_ variable automática y se evalúa en su propio ámbito.

La acción para cada condición es independiente de las acciones en otras condiciones.

En el ejemplo siguiente se muestra el uso de bloques de script como condiciones de instrucción Switch.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

Si el valor coincide con varias condiciones, se ejecuta la acción de cada condición. Para cambiar este comportamiento, use las palabras clave Break o Continue.

La palabra clave Break detiene el procesamiento y sale de la instrucción Switch.

La palabra clave Continue detiene el procesamiento del valor actual, pero continúa procesando los valores posteriores.

En el ejemplo siguiente se procesa una matriz de números y se muestra si son impares o incluso. Los números negativos se omiten con la palabra clave Continue. Si se encuentra un no número, la ejecución finaliza con la palabra clave Break.

switch (1,4,-1,3,"Hello",2,1)
{
    {$_ -lt 0} { Continue }
    {$_ -isnot [Int32]} { Break }
    {$_ % 2} {
        "$_ is Odd"
    }
    {-not ($_ % 2)} {
        "$_ is Even"
    }
}
1 is Odd
4 is Even
3 is Odd

VÉASE TAMBIÉN

about_Break

about_Continue

about_If

about_Script_Blocks