Compartilhar via


about_If

Descrição breve

Descreve um comando de linguagem que você pode usar para executar listas de instruções com base nos resultados de um ou mais testes condicionais.

Descrição longa

Você pode usar a if instrução para executar blocos de código se um teste condicional especificado for avaliado como true. Você também pode especificar um ou mais testes condicionais adicionais a serem executados se todos os testes anteriores forem avaliados como falsos. Por fim, você pode especificar um bloco de código adicional que será executado se nenhum outro teste condicional anterior for avaliado como true.

Sintaxe

O exemplo a seguir mostra a sintaxe da if instrução:

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

Quando você executa uma if instrução, o PowerShell avalia a <test1> expressão condicional como verdadeira ou falsa. Se <test1> for true, <statement list 1> é executado e o PowerShell sai da if instrução. Se <test1> for false, o <test2> PowerShell avaliará a condição especificada pela instrução condicional.

Para obter mais informações sobre a avaliação booleana, consulte about_Booleans.

Se <test2> for true, <statement list 2> é executado e o PowerShell sai da if instrução. Se ambos e <test1> <test2> evaluate forem falsos, o <statement list 3> bloco de código será executado e o PowerShell sairá da if instrução.

Você pode usar várias elseif instruções para encadear uma série de testes condicionais. Cada teste será executado somente se todos os testes anteriores forem falsos. Se você precisar criar uma if instrução que contenha muitas elseif instruções, considere usar uma instrução Switch.

Exemplos:

A instrução mais if simples contém um único comando e não contém nenhuma elseif instrução ou else instrução. O exemplo a seguir mostra a forma mais simples da if instrução:

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

Neste exemplo, se a $a variável for maior que 2, a condição será avaliada como verdadeira e a lista de instruções será executada. No entanto, se $a for menor ou igual ou 2 não for uma variável existente, a if instrução não exibirá uma mensagem.

Ao adicionar uma instrução Else, uma mensagem é exibida quando $a é menor ou igual a 2. Como mostra o próximo exemplo:

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 ainda mais este exemplo, você pode usar a elseif instrução para exibir uma mensagem quando o valor de $a for igual a 2. Como mostra o próximo exemplo:

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

Usando a sintaxe do operador ternário

O PowerShell 7.0 introduziu uma nova sintaxe usando o operador ternário. Ele segue a sintaxe do operador ternário C#:

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

O operador ternário se comporta como a instrução simplificada if-else . A <condition> expressão é avaliada e o resultado é convertido em um booleano para determinar qual ramificação deve ser avaliada em seguida:

  • A expressão <if-true> será executada se a expressão <condition> for verdadeira
  • A expressão <if-false> será executada se a expressão <condition> for falsa

Por exemplo:

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

Neste exemplo, o valor de $message is Path exists when Test-Path retorna $true. Quando Test-Path retorna $false, o valor de $message é Path not found.

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

Neste exemplo, se o serviço estiver em execução, ele será interrompido e, se seu status não for Em execução, ele será iniciado.

Se uma <condition>expressão , <if-true>, ou <if-false> chamar um comando, você deverá envolvê-lo entre parênteses. Caso contrário, o <condition> PowerShell gerará uma exceção de argumento para o comando na expressão e exceções de análise para as <if-true> expressões e <if-false> .

Por exemplo, o PowerShell gera exceções para esses ternários:

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.

E este exemplo analisa:

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

Confira também