Este artigo foi atualizado para 2023!
Scripts podem tomar decisões. Como? Usando um conceito chamado lógica condicional. A instrução if do PowerShell e os construtos if/else são as formas comuns de definir condições.
Ao escrever scripts do PowerShell, você o faz com uma tarefa específica em mente. Mas, uma operação pode ter múltiplas ações possíveis baseadas em uma ou mais condições. Esta situação é onde entra o construto If do PowerShell.
Neste artigo, você aprenderá o construto If-Else do PowerShell e entenderá sua sintaxe e como ele funciona. Você também aprenderá algumas maneiras de usar a instrução If do PowerShell para adicionar tratamento de lógica condicional em seus scripts a partir dos exemplos.
Entendendo a Sintaxe da Instrução If do PowerShell
O construto if-else do PowerShell avalia uma ou mais expressões condicionais. Abaixo, você verá a sintaxe da instrução If. Este estilo é frequentemente chamado de controle de fluxo.
Como você pode ver na sintaxe acima, cada teste está entre parênteses ()
. Os testes podem fazer uso de diferentes operadores, como operadores de comparação e operadores lógicos,
As listas de instruções contêm o código destinado a ser executado se o resultado do teste avaliar como verdadeiro.
Então, existem três declarações possíveis em um grupo de declarações If. Estas são as declarações IF, ELSEIF e ELSE.
- A declaração
if
contém o primeiro teste a ser avaliado, seguido pela primeira lista de declarações entre chaves{}
. A declaração PowerShell if é a única declaração necessária para estar presente. - A declaração
elseif
é onde você adiciona condições. Você pode adicionar múltiplas declarações ElseIf quando tiver várias condições. O PowerShell irá avaliar cada uma dessas condições sequencialmente. - A declaração
else
não aceita nenhuma condição. A lista de declarações nesta declaração contém o código a ser executado se todas as condições anteriores testadas forem falsas.
Compreendendo o Fluxo Lógico da Declaração If do PowerShell
Para entender melhor como o If-Else do PowerShell funciona, familiarize-se com seu fluxo lógico. O diagrama abaixo ilustra o fluxo básico do If-Else do PowerShell.

Quando a declaração if é executada, o PowerShell passa por cada condição avaliando se o código retorna verdadeiro ou falso. Um resumo do comportamento está abaixo:
- O PowerShell avalia a condição em Teste 1.
- Se o resultado de Teste 1 retornar verdadeiro, o código dentro da lista da declaração If será executado, então o PowerShell sai da declaração If.
- Se o resultado de Teste 1 retornar falso, o PowerShell continua a avaliar a condição (Teste n) na próxima declaração ElseIf.
- Se o resultado do Teste n retornar false, o PowerShell continuará a avaliar a condição (Test n) na próxima instrução ElseIf, se outra instrução ElseIf existir -OU-
- Se o resultado do Teste n retornar false, o código na instrução Else será executado e o PowerShell sairá da instrução If -OU-
- Se o resultado do Teste n retornar true, o código na instrução ElseIf será executado e o PowerShell sairá da instrução If.
Usando a Instrução If-Else do PowerShell
As próximas seções apresentam vários exemplos de como a instrução If do PowerShell é usada ao escrever scripts. As técnicas que você aprenderá podem orientá-lo no uso da instrução If caso encontre uma situação da vida real que exija seu uso.
Condição If-Else Única
Começando com o mais básico, temos a única instrução If do PowerShell. Você deve usar uma única instrução if quando houver apenas uma condição para testar.
O exemplo abaixo testa se o valor da variável $num
é maior que 10. Se o resultado for verdadeiro, o resultado dizendo "$num é maior que 10"
será exibido na tela. Se o resultado for falso, o PowerShell não faz nada porque há apenas uma condição para testar.
Se você verificar apenas um valor específico, como
if ($Valor) { }
, então o PowerShell testará se o$Valor
não é$Nulo
,0
,$Falso
, uma string vazia ou um array vazio.
Colar o código acima no PowerShell fornecerá o resultado mostrado abaixo.

Agora, você pode adicionar a instrução Else se quiser adicionar uma ação padrão de “fallback” em vez de apenas permitir que o PowerShell não faça nada quando o resultado do teste for falso.
No exemplo abaixo, o código na instrução Else será executado se o valor da variável $num
NÃO for maior que 10.
Executar o código modificado no PowerShell fornece a saída mostrada abaixo.

Começando com o PowerShell 7.0, uma nova sintaxe para a instrução If foi introduzida usando um operador ternário. Instruções If únicas podem fazer bom uso dessa nova sintaxe.
Usando o mesmo exemplo acima, é assim que o código ficaria com o operador ternário.

Testando para $Null em uma Instrução If do PowerShell
Você pode pensar que testar uma condição de $Null
é simples. Mas, o lado em que você coloca o valor $Null
é importante, pois pode não resultar na mesma coisa em todas as condições. É uma boa prática sempre colocar a condição $Null
no lado esquerdo, assim.
Se você colocar o teste $Null
no lado direito, e o valor do lado esquerdo for uma lista, como um array, então o $Null
atuará como um filtro. Como você pode ver pelo exemplo abaixo, se o $Null
for colocado no lado esquerdo, você terá resultados booleanos consistentes.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

Múltiplas Condições If-Else com ElseIf
Ao avaliar múltiplas condições, você precisa adicionar uma ou mais declarações ElseIf. Cada declaração ElseIf contém a expressão de teste e o código a ser executado.
O script abaixo, quando executado, continuará solicitando um nome de fruta até que a tecla CTRL+C
seja pressionada, ou o usuário insira a letra “X
“.
Então, a instrução If passará por cada condição em sequência até encontrar uma correspondência. Se a entrada não corresponder a nenhuma das condições, o código dentro da declaração Else será executado.
Abaixo está uma demonstração de como o script acima se comporta ao ser executado no PowerShell.

Relatório do Status do Espaço Livre em Disco
Relatar o espaço livre em disco é uma tarefa comum para administradores de sistemas. A maneira usual de relatar as informações de espaço dos discos fixos em uma máquina Windows gira em torno do código abaixo.
As informações que o código acima retornará se parecerão com as mostradas na próxima captura de tela.

Como você pode ver, a saída acima mostra a letra da unidade, os valores de espaço livre e outras propriedades. Embora a saída acima esteja correta, ela não é intuitiva. Como as informações são apresentadas não indica se o espaço em disco está em um estado crítico, de aviso ou normal.
Usando uma Instrução If do PowerShell para Melhorar o Código
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
O script de exemplo abaixo realiza o seguinte:
- Usando o valor da variável
$Critical
, defina o limiar para o qual a porcentagem de espaço livre será marcada como crítica. - Usando o valor da variável
$Warning
, defina o limiar para o qual a porcentagem de espaço livre será marcada como warning. - Obtenha todas as informações de disco fixo da máquina local
- Itere por todas as informações de disco para determinar o espaço livre e marcar seu status.
- Se a porcentagem de espaço livre for maior que o valor da variável
$Warning
, o status do espaço em disco é marcado como normal. - Se a porcentagem de espaço livre for maior que o valor da variável
$Critical
, o status do espaço em disco é marcado como warning. - Se a porcentagem de espaço livre for menor ou igual ao valor da variável
$Critical
, o status do espaço em disco é marcado como crítico.
- Se a porcentagem de espaço livre for maior que o valor da variável
- Componha as propriedades do objeto
'Drive Letter'
,'Drive Name'
,'Total Space (GB)'
,'Free Space (GB)'
,'Free Space (%)'
e'Status'
. - Devolver o relatório final.
Copie o código abaixo e salve o script com o nome de arquivo Get-DiskSpace.ps1
. Não se esqueça de alterar os valores das variáveis $Critical
e $Warning
para testar com diferentes limites.
Você também pode atribuir o resultado da condição if/else a uma variável, por exemplo,
$Status = if ($percentFree -gt $Warning) { 'Normal' }
para potencialmente criar uma condição mais curta.
Depois que o script estiver salvo, teste-o chamando seu nome no PowerShell. Abaixo está uma demonstração de amostra de como este script funciona.

Como você pode ver a partir da saída, o status de cada disco é determinado pela porcentagem de espaço livre no disco, que foi o resultado de usar várias condições com o If-Else do PowerShell.
Vários e If-Else Aninhados
Vamos supor que você tenha uma declaração if-else com uma condição definida no bloco else
. Quando a declaração if-else é executada, o bloco else
é invocado se o código dentro do bloco if
retornar falso.
Dentro do bloco else
, você precisa realizar outro teste condicional. Como resultado, você precisa de outra declaração If-Else. Esse cenário é chamado de If-Else aninhado. A declaração If-Else aninhada é comumente usada se o If-Else interno depender do resultado da operação no If-Else externo.
O uso de declarações If-Else múltiplas e aninhadas pode ser bastante confuso. O ponto chave é lembrar da posição do esqueleto e garantir que você indente seu código. Indentar seu código ajudará você a reconhecer e separar facilmente suas declarações If-Else.
Exemplo de Declarações If-Else Múltiplas/Aninhadas
O script de exemplo abaixo mostra como If-Else múltiplas e aninhadas podem depender do resultado umas das outras. A lógica do código abaixo é a seguinte.
- Se o
$SendEmail
for$false
, o script não fará nada e sairá. - Se o
$SendEmail
for$true
, então as variáveis$From
e$To
não podem estar vazias ou nulas. Caso contrário, o$abortFlag
será definido como 1. - Se o
$SendEmail
for$true
e o$CCEnabled
for$true
, então a variável$CC
não pode estar vazia ou nula. Caso contrário, o$abortFlag
será definido como 1. - Se o
$SendEmail
é$true
e o$BCCEnabled
é$true
, então a variável$BCC
não deve estar vazia ou nula. Caso contrário, o$abortFlag
será definido como 1. - Se o valor de
$abortFlag
for 1, o script sairá neste ponto e não continuará. - Se o valor de
$abortFlag
for 0, o script continuará até o fim.
Copie o código abaixo e salve-o como Send-MyMail.ps1
. Não altere nenhum valor ainda.
Depois de salvar o arquivo, execute-o no PowerShell, como mostrado abaixo. A demonstração abaixo mostra o resultado do script quando os valores das variáveis permanecem inalterados.

Em seguida, edite o script e atualize todas as variáveis corretamente, como este trecho abaixo.
Após editar as variáveis, salve o script e execute-o novamente. Deve mostrar o mesmo resultado, conforme visto abaixo.

Agora, modifique as variáveis e experimente combinações para testar como o If-Else aninhado será afetado. Modificar e testar por conta própria ajudará você a entender melhor a lógica.
Resumo
Neste artigo, você aprendeu sobre a construção lógica condicional – a construção If Statement do PowerShell. A instrução If-Else permite aos scripters formular lógica condicional e direcionar as ações de seus scripts com base nos resultados dos testes.
Com os exemplos deste artigo, você deveria ter aprendido maneiras e técnicas de usar a instrução If-Else ao criar um código orientado por decisões. If-Else pode ser simples usando uma única condição e se torna mais complexo à medida que você se aprofunda nas instruções If-Else aninhadas.
O que você acha da instrução If-Else? É algo que você acredita que estaria usando mais e mais após ler este artigo? Que outros propósitos você pode considerar onde pode aplicar o conhecimento que adquiriu aqui?