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

PowerShell é uma linguagem de script poderosa que oferece muitos recursos para automação e gerenciamento de sistemas baseados no Windows. Uma das construções mais comumente usadas é 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 sua grande escapada. 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 while loop com uma única condição:

  • A primeira coisa que você notará é o uso de parênteses. A condição deve estar entre 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 notar é que a condição deve retornar um valor booleano, que avalia para Verdadeiro ou Falso.
while (condition)
{

	# Bloco de código para executar

}

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, o que torna 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 while loop para ser executado até que o valor da variável $val alcance 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 o Loop While no PowerShell com Variáveis Embutidas ($true/$false)

O exemplo anterior, usando condições no loop while, funciona bem. Mas você também pode usar as variáveis embutidas 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 roda para sempre. Mas você deve sempre incluir uma maneira de sair de um loop infinito. Caso contrário, você ficará preso para sempre. Você aprenderá mais sobre como sair de um loop usando break e continue mais adiante neste tutorial.

while($true)
{

	# Bloco de código para executar

}

Execute o bloco de código abaixo, que roda para sempre, imprimindo o valor de $i no console.

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

# Configura o loop While para rodar 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, então 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 de loops while com uma única condição, você também pode criar loops while com várias condições. Assim como no loop while com uma única condição, as condições devem retornar um valor booleano, seja Verdadeiro (True) ou Falso (False).

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

  • E (-and) – Ambas as condições devem ser verdadeiras.
  • OU (-or) – Qualquer uma das condições pode ser verdadeira.
# Operador E (AND)
while (condition1 -AND condition2)
{

	# Bloco de código a ser executado

}

# Operador OU (OR)
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 é igual (-ne) a 3 -and $i não é igual (-ne) a 5.

Quando os valores de ambas as variáveis atingem 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 o valor atual das variáveis $val e $i
  Write-Host "$val, $i"
}

Executando um loop while com operador E

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 não for um número (-nomatch), o usuário será 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 ser executado 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

Na saída abaixo, você pode ver que o usuário foi solicitado a inserir sua idade três vezes, conforme segue:

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

Usando as Palavras-chave BREAK e CONTINUE em Laços While

Você viu como os laços while adicionam flexibilidade ao seu script PowerShell. Mas para melhor controlar a execução dos seus laços While, adicione as palavras-chave break e continue.

Por exemplo, se você deseja processar apenas um certo número de itens em um array, você pode usar a palavra-chave BREAK para sair do laço quando o número desejado de itens foi 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 ignora o restante do código no laço e continua com a próxima iteração. Se o valor de $i for 8, a palavra-chave break sai do laço e continua com o resto do script.

Caso contrário, o laço 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
# Configura o loop While para ser executado 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 em 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 em 1
  $i++
}

Como você pode ver no resultado abaixo, o loop pulou os itens cinco e oito 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

Geralmente, 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 atingir o tempo limite e sair do loop, utilizando 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 atuais Get-Date na variável $startTime. O loop while é executado enquanto a data/hora atual for menor que 10 segundos do valor armazenado em $startTime.

Enquanto 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 que 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 ao lidar 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 os loops while para scripts mais flexíveis e poderosos.

Com esse conhecimento recém-adquirido, 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/