Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Breve descrição
Descreve um comando language 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 instrução if 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 para executar se todos os testes anteriores avaliarem como false. Finalmente, 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 instrução if:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Quando você executa uma instrução if, o PowerShell avalia a expressão condicional <test1> como true ou false. Se <test1> for verdadeiro, <statement list 1> será executado e o PowerShell sairá da instrução if. Se <test1> for false, o PowerShell avaliará a condição especificada pela instrução condicional <test2>.
Para obter mais informações sobre a avaliação booleana, consulte about_Booleans.
Se <test2> for verdadeiro, <statement list 2> será executado e o PowerShell sairá da instrução if. Se <test1> e <test2> avaliarem como false, o bloco de código <statement list 3> será executado e o PowerShell sairá da instrução if.
Você pode usar várias instruções elseif para encadear uma série de testes condicionais. Cada teste é executado somente se todos os testes anteriores forem falsos. Se você precisar criar uma instrução if que contenha muitas instruções elseif, considere usar uma instrução switch em vez disso.
Exemplos:
A instrução if mais simples contém um único comando e não contém nenhuma instrução elseif ou nenhuma instrução else. O exemplo a seguir mostra a forma mais simples da instrução if:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Neste exemplo, se a variável $a for maior que 2, a condição será avaliada como true e a lista de instruções será executada. No entanto, se $a for menor ou igual a 2 ou não for uma variável existente, a instrução if não exibirá uma mensagem.
Ao adicionar uma instrução else, uma mensagem é exibida quando $a é menor ou igual a 2. Como mostra o exemplo a seguir:
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 instrução elseif para exibir uma mensagem quando o valor de $a for igual a 2. Como mostra o exemplo a seguir:
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. Segue a sintaxe do operador ternário C#:
<condition> ? <if-true> : <if-false>
O operador ternário comporta-se como a declaração de if-else simplificada. A expressão <condition> é avaliada e o resultado é convertido em um booleano para determinar qual ramo deve ser avaliado em seguida:
- A expressão
<if-true>é executada se a expressão<condition>for verdadeira - A expressão
<if-false>é 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 é Path exists quando 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 Executando, ele será iniciado.
Se uma expressão <condition>, <if-true>ou <if-false> chamar um comando, você deverá envolvê-lo entre parênteses. Caso contrário, o PowerShell gera uma exceção de argumento para o comando na expressão <condition> e as exceções de análise para as expressões <if-true> e <if-false>.
Por exemplo, o PowerShell gera exceções para estes 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