O PowerShell While Loop: Um Guia de Volta aos Conceitos Básicos

O PowerShell é uma linguagem de script poderosa que oferece muitos recursos para automação e gerenciamento de sistemas baseados no Windows. Um dos construtos mais comumente usados é o loop while do PowerShell.

Não se preocupe se você ficou preso em um loop infinito ao tentar aprender script do PowerShell. Deixe o loop while do PowerShell guiar você para a sua grande saída. E neste tutorial, você voltará aos conceitos básicos de trabalhar com loops while no PowerShell enquanto escreve seus scripts.

Continue lendo para levar suas habilidades de script do PowerShell para o próximo nível!

Pré-requisitos

Este tutorial será uma demonstração prática. Para acompanhar, certifique-se de ter o seguinte:

  • A Windows machine – This tutorial uses Windows 10.
  • Windows PowerShell 5.0 ou superior instalado – Este tutorial usa o PowerShell 7.
  • A user account with administrator privileges.

Executando Loops while com Condição Única

Um dos tipos mais simples de loop while é o tipo de condição única. Ao contrário da declaração If, este tipo de loop executa um conjunto de comandos dados enquanto uma condição especificada avalia como verdadeira. Quando um ‘Falso’ é retornado, o loop é interrompido e a execução continua com o restante do script.

Abaixo está a sintaxe para um loop de condição única while:

  • A primeira coisa que você notará é o uso de parênteses. A condição deve ser cercada por parênteses, enquanto o bloco de código é um conjunto de comandos do PowerShell que são executados enquanto a condição for verdadeira.
  • A segunda coisa a se observar é que a condição deve retornar um valor booleano, que se avalia como Verdadeiro ou Falso.
while (condition)
{

	# Bloco de código a ser executado

}

Execute o código abaixo, onde o valor de $val começa em 0 e é incrementado por 1 cada vez que o bloco de código é executado até que o valor da variável $val seja igual a 3.

Quando $val atinge o valor de 3, tornando a condição Falsa, o loop é interrompido, e a execução continua com o restante do script.

# Declara a variável $val com o valor inicial de 0
$val = 0

# Define o loop while para ser executado até que o valor da variável $val atinja 3
while($val -ne 3)
{
	# Incrementa o valor da variável $val em 1
	$val++
	
	# Imprime o valor atual da variável $val
	Write-Host $val
}
Understanding Single Condition While Loops.

Executando um Loop While no PowerShell com Variáveis Incorporadas ($true/$false)

O exemplo anterior, utilizando condições no loop while, funciona bem. Mas você também pode usar variáveis incorporadas do PowerShell, como $true e $false, para criar um loop While.

A sintaxe abaixo executa até que $true não seja mais $true. Em outras palavras, o loop é executado indefinidamente. No entanto, é necessário sempre incluir uma maneira de sair de um loop infinito. Caso contrário, ficará preso indefinidamente. Você aprenderá mais sobre como sair de um loop usando break e continue mais tarde neste tutorial.

while($true)
{

	# Bloco de código a ser executado

}

Execute o bloco de código abaixo, que é executado indefinidamente, imprimindo o valor de $i no console.

# Declara a variável $i com o valor inicial de 0
$i = 0

# Define o loop While para ser executado enquanto a condição for $true
while($true)
{
	# Incrementa o valor de $i em 1
	$i++
	
	# Imprime o valor atual da variável $i
	Write-Host $i
}

Agora, pressione Ctrl+C para sair do loop. Este loop consome muitos recursos do sistema, portanto, tenha cuidado ao usá-los.

Executing a while loop with PowerShell’s built-in ($true) variable

Executando Loops While com Múltiplas Condições

Além dos loops while de condição única, você também pode criar loops while de múltiplas condições. Assim como no loop while de condição única, as condições devem retornar um valor booleano, seja Verdadeiro ou Falso.

Abaixo está a sintaxe para um loop while de múltiplas condições, similar à sintaxe para um loop while de condição única. A principal diferença é que você pode incluir múltiplas condições separadas pelos seguintes operadores:

  • E (-e) – Ambas as condições devem ser verdadeiras.
  • OU (-ou) – Qualquer condição pode ser verdadeira.
# Operador E
while (condition1 -AND condition2)
{

	# Bloco de código a ser executado

}

# Operador OU
while (condition1 -OR condition2)
{

	# Bloco de código a ser executado

}

Execute o código abaixo, que faz um loop while enquanto $val não for igual (-ne) a 3 -e $i não for igual (-ne) a 5.

Quando os valores de ambas as variáveis alcançarem suas respectivas condições, o loop é interrompido, e a execução continua com o restante do script.

# Declara as variáveis $val e $i com valores iniciais de 0
$val = 0
$i = 0

# Define o loop While para executar até que $val seja igual a 3 e $i seja igual a 5
while($val -ne 3 -and $i -ne 6)
{
	# Incrementa $val em 1
  $val++
	# Incrementa $i em 2
  $i += 2
	# Imprime os valores atuais das variáveis $val e $i
  Write-Host "$val, $i"
}

Executando um while loop com o operador AND

Executing a while loop with AND operator

Agora, execute o código abaixo, que solicita ao usuário sua idade, armazenada na variável $age.

Se o usuário inserir um número menor que (-lt) 1 ou se não for um número (-nomatch), o usuário é solicitado novamente a inserir um número válido. Esse comportamento é útil para dar aos usuários várias chances de inserir uma entrada válida.

# Solicita aos usuários que insiram sua idade
$age = Read-Host "Please Enter Your Age"

# Define o loop While para executar até que o usuário forneça uma entrada válida
while($age -notmatch "\\d+" -or $age -lt 1)
{
	# Solicita novamente ao usuário para inserir uma idade válida
  $age = Read-Host "Please Enter Your Valid Age"
}
# Imprime a entrada de idade válida
Write-Host "Your age is $age

No resultado abaixo, você pode ver que o usuário foi solicitado a inserir sua idade três vezes, conforme a seguir:

  • A primeira vez, o usuário digitou dez, que não é um número.
  • A segunda vez, o usuário digitou 0, que está abaixo de 1.
  • A terceira vez, o usuário digitou 10, que é uma idade válida.
Executing a while loop with the OR operator

Usando as palavras-chave BREAK e CONTINUE em Loops While

Você viu como os loops while adicionam flexibilidade ao seu script PowerShell. Mas para um melhor controle da execução de seus loops While, adicione as palavras-chave break e continue.

Por exemplo, se você quiser processar apenas um certo número de itens em um array, você pode usar a palavra-chave BREAK para sair do loop quando o número desejado de itens tiver sido processado.

Essas palavras-chave funcionam da seguinte forma:

Keyword Function
break Immediately exits the loop and continues execution with the rest of the script.
continue Skips over the remaining code block in the current iteration of the loop and continues with the next iteration.

Execute o código abaixo, que percorre um array de 10 itens.

No código abaixo, a instrução if verifica o valor de $i. Se o valor de $i for 5, a palavra-chave continue pula o restante do código no loop e continua com a próxima iteração. Se o valor de $i for 8, a palavra-chave break sai do loop e continua com o restante do script.

Caso contrário, o loop while imprime (Write-Host) e incrementa o valor da variável $i em 1.

# Declara um $array de 10 itens
$array = 1..10
# Declara a variável $i com o valor inicial de 0
$i = 0
# Define o loop While para executar até que a condição seja atendida
while($i -lt $array.Count)
{
	# Verifica se $i é igual a 5
  if($i -eq 5)
  {
		# Se sim, incrementa $i por 1
    $i++
		# Continua com a próxima iteração
    continue
  }
	# Verifica se $i é igual a 8
  if($i -eq 8)
  {
		# Se sim, quebra o loop While e continua com o restante do script
    break
  }
	# Imprime o valor atual de $i
  Write-Host "Processing item $i"
	# Incrementa $1 por 1
  $i++
}

Como você pode ver na saída abaixo, o loop pulou sobre o quinto e o oitavo itens no array. O while loop processou todos os outros itens no array e saiu após atingir o oitavo item.

Executing a while loop with break and continue keywords

Limitando o Tempo de Execução de um Loop While

Normalmente, você pode querer limitar o tempo que um loop é executado. Talvez você esteja tentando se conectar a um servidor remoto. Se for o caso, você pode dar ao servidor tempo para responder antes de expirar e sair do loop usando o cmdlet Start-Sleep dentro do seu loop while.

O cmdlet Start-Sleep pausa a execução do script por um período de tempo especificado.

Execute o código abaixo para obter e armazenar a data e hora atual Get-Date na variável $startTime. O loop while é executado enquanto a data/hora atual for inferior a 10 segundos do valor armazenado em $startTime.

À medida que o loop while é executado, uma mensagem é impressa enquanto o cmdlet Start-Sleep pausa a execução do script por 1 segundo.

O bloco de código abaixo é apenas um modelo para o que você realmente usaria na prática. Você pode adicionar mais código dentro do loop conforme necessário.

# Obter e armazenar a data/hora atual
$startTime = Get-Date
# Define o loop While para ser executado enquanto a data/hora atual for inferior a 10 segundos 
	# a partir do valor armazenado em $startTime.
while((Get-Date) -lt ($startTime.AddSeconds(10)))
{
	# Imprime uma mensagem
  Write-Host "Waiting for server to respond..."
	# Pausa o script por um segundo
  Start-Sleep -Seconds 1
}

Abaixo, você pode ver o loop continuou a ser executado por 10 segundos antes de sair do loop.

Limiting the time a while loop runs

Conclusão

Os loops while do PowerShell são úteis quando se depara com conceitos complexos para evitar ficar preso em um loop ou ao escrever seus scripts. E neste tutorial, você aprendeu muitas maneiras de trabalhar com loops while para scripts mais flexíveis e poderosos.

Com este novo conhecimento, o céu é o limite. Então, por que não maximizar o uso de operadores lógicos e palavras-chave para automatizar tarefas com seus scripts?

Source:
https://adamtheautomator.com/powershell-while-loop/