about_If

Descripción breve

Describe un comando de lenguaje que puede usar para ejecutar listas de instrucciones en función de los resultados de una o varias pruebas condicionales.

Descripción larga

Puede usar la if instrucción para ejecutar bloques de código si una prueba condicional especificada se evalúa como true. También puede especificar una o varias pruebas condicionales adicionales para ejecutarse si todas las pruebas anteriores se evalúan como false. Por último, puede especificar un bloque de código adicional que se ejecute si ninguna otra prueba condicional anterior se evalúa como true.

Sintaxis

En el ejemplo siguiente se muestra la sintaxis de la if instrucción :

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

Al ejecutar una if instrucción, PowerShell evalúa la <test1> expresión condicional como true o false. Si <test1> es true, <statement list 1> ejecuta y PowerShell sale de la if instrucción . Si <test1> es false, PowerShell evalúa la condición especificada por la <test2> instrucción condicional.

Para obtener más información sobre la evaluación booleana, consulte about_Booleans.

Si <test2> es true, <statement list 2> ejecuta y PowerShell sale de la if instrucción . Si y se evalúan como <test1><test2> false, el bloque de <statement list 3> código se ejecuta y PowerShell sale de la if instrucción .

Puede usar varias elseif instrucciones para encadenar una serie de pruebas condicionales. Cada prueba solo se ejecuta si todas las pruebas anteriores son falsas. Si necesita crear una if instrucción que contenga muchas elseif instrucciones, considere la posibilidad de usar una instrucción Switch en su lugar.

Ejemplos:

La instrucción más sencilla if contiene un solo comando y no contiene ninguna elseif instrucción ni ninguna else instrucción. En el ejemplo siguiente se muestra la forma más sencilla de la if instrucción :

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}

En este ejemplo, si la $a variable es mayor que 2, la condición se evalúa como true y la lista de instrucciones se ejecuta. Sin embargo, si $a es menor o igual que 2 o no es una variable existente, la if instrucción no muestra un mensaje.

Al agregar una instrucción Else, se muestra un mensaje cuando $a es menor o igual que 2. Como se muestra en el ejemplo siguiente:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
else {
    Write-Host ("The value $a is less than or equal to 2," +
        " is not created or is not initialized.")
}

Para refinar aún más este ejemplo, puede usar la elseif instrucción para mostrar un mensaje cuando el valor de $a es igual a 2. Como se muestra en el ejemplo siguiente:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
    Write-Host "The value $a is equal to 2."
}
else {
    Write-Host ("The value $a is less than 2 or" +
        " was not created or initialized.")
}

Uso de la sintaxis del operador ternario

PowerShell 7.0 introdujo una nueva sintaxis mediante el operador ternario. Sigue la sintaxis del operador ternario de C#:

<condition> ? <if-true> : <if-false>

El operador ternario se comporta como la instrucción simplificada if-else . La <condition> expresión se evalúa y el resultado se convierte en un valor booleano para determinar qué rama se debe evaluar a continuación:

  • La expresión <if-true> se ejecuta si la expresión de <condition> es true
  • La expresión <if-false> se ejecuta si la expresión de <condition> es false

Por ejemplo:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

En este ejemplo, el valor de $message es Path exists cuando Test-Path devuelve $true. Cuando Test-Path devuelve $false, el valor de $message es Path not found.

$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)

En este ejemplo, si el servicio se está ejecutando, se detiene y, si su estado no es En ejecución, se inicia.

Si una <condition>expresión , <if-true>o <if-false> llama a un comando, debe encapsularla entre paréntesis. Si no lo hace, PowerShell genera una excepción de argumento para el comando en la <condition> expresión y analiza las excepciones de las <if-true> expresiones y <if-false> .

Por ejemplo, PowerShell genera excepciones para estas ternaries:

Test-Path .vscode   ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
     |                       ~
     | You must provide a value expression following the '?' operator.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
     |                                               ~
     | You must provide a value expression following the ':' operator.

Y en este ejemplo se analiza:

(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists

Consulte también