Este artigo foi atualizado para 2023!
Os 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 ou objetivo específico em mente. No entanto, uma operação pode ter múltiplas ações possíveis com base em uma ou mais condições. Esta situação é onde o construto If do PowerShell entra em cena.
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 é envolvido por 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 for avaliado como verdadeiro.
Então, há três declarações possíveis em um grupo de instruções If. Estas são as declarações IF, ELSEIF e ELSE.
- A instrução
if
contém o primeiro teste a ser avaliado, seguido pela primeira lista de instruções envolvidas em chaves{}
. A instrução PowerShell if é a única instruçã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 múltiplas condições. O PowerShell avaliará cada uma dessas condições sequencialmente. - A declaração
else
não aceita nenhuma condição. A lista de instruções nesta declaração contém o código a ser executado se todas as condições anteriores testadas forem falsas.
Entendendo o Fluxo Lógico da Instruçã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 instruçã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 do Teste 1 retornar verdadeiro, o código dentro da lista da instrução If será executado, então o PowerShell sai da instrução If.
- Se o resultado do Teste 1 retornar falso, o PowerShell continua a avaliar a condição (Teste n) na próxima declaração ElseIf.
- Se o resultado de Test 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 Test 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 Test n retornar verdadeiro, 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 são 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 você 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
,$False
, uma string vazia ou um array vazio.
Colando o código acima no PowerShell, você obterá 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 deixar o PowerShell não fazer 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.
A execução do código modificado no PowerShell produz 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. As instruções If únicas podem fazer bom uso dessa nova sintaxe.
Usando o mesmo exemplo acima, assim é como o código ficaria com o operador ternário.

Testando o $Null em uma Instrução If do PowerShell
Você pode pensar que testar uma condição de $Null
é direto. Mas, o lado em que você coloca o valor $Null
é importante, pois pode não resultar no mesmo em cada condição. É uma prática recomendada sempre colocar a condição $Null
à esquerda, assim.
Se você colocar o teste de $Null
no lado direito e o valor do lado esquerdo for uma lista, como um array, então $Null
agirá como um filtro. Como pode ser visto no exemplo abaixo, se $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

Condições Múltiplas If-Else com ElseIf
Ao avaliar múltiplas condições, é necessário adicionar uma ou mais instruções ElseIf. Cada instruçã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 instrução Else será executado.
Aqui está uma demonstração de como o script acima se comporta ao ser executado no PowerShell.

Relatando o Status do Espaço Livre em Disco
O relatório do espaço livre em disco é uma tarefa comum para administradores de sistema. 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 bem, ela não é intuitiva. Como as informações são apresentadas não indica se o espaço em disco está em 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
, define o limite no qual a porcentagem de espaço livre será marcada como crítica. - Usando o valor da variável
$Aviso
, defina o limiar para o qual a porcentagem de espaço livre será marcada como aviso. - Obtenha todas as informações do disco fixo da máquina local
- Itere por todas as informações do 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
$Aviso
, 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
$Crítico
, o status do espaço em disco é marcado como aviso. - Se a porcentagem de espaço livre for menor ou igual ao valor da variável
$Crítico
, 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
'Letra da unidade'
,'Nome da unidade'
,'Espaço total (GB)'
,'Espaço livre (GB)'
,'Espaço livre (%)'
e'Status'
. - Retorne 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 limiares.
Você também pode atribuir o resultado da condição if/else a uma variável, ou seja,
$Status = if ($percentFree -gt $Warning) { 'Normal' }
para potencialmente criar uma condição mais curta.
Depois que o script for salvo, teste-o chamando seu nome no PowerShell. Abaixo está uma demonstração de amostra de como esse 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 do uso de várias condições com If-Else do PowerShell.
Múltiplos e If-Else Aninhados
Vamos dizer 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 false.
Dentro do bloco else
, você precisa realizar outro teste condicional. Como resultado, você precisa de outra declaração If-Else. Este 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.
Usar múltiplas e aninhadas declarações If-Else pode ser bastante confuso. O ponto-chave é lembrar da colocação da estrutura 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 múltiplas e aninhadas declarações If-Else 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 devem 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 deve estar vazia ou nula. Caso contrário, o$abortFlag
será definido como 1. - Se o
$SendEmail
for$true
e o$BCCEnabled
for$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 do
$abortFlag
for 1, o script sairá neste ponto e não continuará. - Se o valor do
$abortFlag
for 0, o script continuará até o final.
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, conforme 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 no trecho abaixo.
Após editar as variáveis, salve o script e execute-o novamente. Deve mostrar o mesmo resultado, como visto abaixo.

Agora, modifique as variáveis e teste combinações para ver 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 de declaração If do PowerShell. A declaração If-Else permite que os scripters formulem lógica condicional e direcionem as ações de seus scripts com base nos resultados dos testes.
Com os exemplos neste artigo, você deve ter aprendido maneiras e técnicas de usar a declaração If-Else ao criar um código orientado por decisões. If-Else pode ser simples usando uma única condição e fica mais complexo à medida que você se aprofunda nas declarações If-Else aninhadas.
O que você acha do comando If-Else? É algo que você acredita que usaria mais após ler este artigo? Que outros propósitos você considera onde pode aplicar o conhecimento adquirido aqui?