Neste artigo, iremos revisar os loops PowerShell, os loops While, Do-While e Do-Until. Vou explicar como os loops do PowerShell são construídos e como definir condições para entrar ou sair de um loop.
Loop For do PowerShell
O loop For é um loop de contagem e é principalmente utilizado quando você precisa repetir uma tarefa um número específico de vezes, processar uma coleção ou especificar itens por um número de índice. Ele se repete enquanto a condição de teste avalia como verdadeira e sai quando for falsa.

A sintaxe para um loop For é a seguinte:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- O bloco <Iniciar> executa um comando ou um conjunto de comandos antes do início do loop. Geralmente, este é o lugar onde você inicializa a variável de contagem.
- Na seção <Condição>, você avalia o teste condicional. Se for verdadeiro, você está entrando no loop e executando os comandos no bloco de script. Em seguida, a condição é avaliada novamente até que resulte em falso.
- O espaço reservado <Repetir> executa um ou mais comandos, separados por vírgulas, em cada iteração do loop. Geralmente, é usado para modificar a variável de contagem.
Se você deseja repetir uma operação específica cinco vezes, utilize o seguinte exemplo:
Saiba quais dados sensíveis são armazenados onde, avalie o risco associado a eles e implemente medidas de proteção de dados baseadas em políticas com o DataSecurity Plus, o software de proteção de dados da ManageEngine. Comece hoje mesmo com uma avaliação gratuita totalmente funcional de 30 dias.
for ($var = 1; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Aqui, a variável é inicializada com um valor de 1, que é menor que 5, então você entra no loop e executa o bloco de script. Em cada iteração, o valor da variável é incrementado em 1 e avaliado em relação à condição até que o resultado seja falso.
Como a condição é avaliada no início, se o resultado for falso, o bloco de comando não será executado:
for ($var = 6; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Se necessário, você pode usar operadores lógicos para especificar mais condições. Neste caso, adicionamos múltiplas condições. E porque o operador lógico -e resulta em verdadeiro apenas quando ambas as condições são verdadeiras, o loop para quando a expressão $var -ne 3 alcança um estado de falso.
for ($var = 1; $var -le 5 -and $var -ne 3; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Como mencionado anteriormente, você pode executar um ou mais comandos nos espaços reservados
No entanto, também temos uma segunda variável, $var2. Ela tem um valor inicial de 5, que é decrementado, mas não é avaliado como parte da condição.
for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) { Write-Host The value of Var1 is: $var1 Write-Host The value of Var2 is: $var2 } Write-Host End of for loop.

Como definir condições de loop no PowerShell
No PowerShell, os comandos são executados sequencialmente. Mas às vezes, você pode precisar repetir um comando ou um conjunto de comandos até que uma determinada condição seja atendida. Isso é chamado de loop.
Para definir as condições para entrar ou sair de um loop no PowerShell, você precisa usar operadores de comparação. Eles permitirão que você compare valores ou encontre um valor que corresponda a um padrão específico. O resultado é um valor Booleano ( true ou false), que é avaliado pela lógica do loop.
Você pode usar operadores de comparação para comparar valores numéricos:
Operation | Result |
2 -eq 2 | True |
2 -eq 5 | False |
3 -gt 7 | True |
5 -lt 3 | False |
Você também pode comparar valores de strings com operadores de comparação:
Saiba quais dados sensíveis estão armazenados onde, avalie o risco associado a eles e implemente medidas de proteção de dados com base em políticas com o DataSecurity Plus, o software de proteção de dados da ManageEngine. Comece hoje mesmo com um teste gratuito e totalmente funcional de 30 dias.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
PowerShell Foreach loop
O loop Foreach é usado para iterar pelos itens em uma coleção. Neste cenário, você não tem uma condição para avaliar, mas o loop se repete até que todos os itens na coleção tenham sido processados.
<Figure Foreach_Diagram.png> The syntax for a Foreach loop is the following: foreach ($<item> in $<collection) { <Script Block> }
Aqui, começamos com a declaração foreach, seguida por colchetes com uma variável e uma coleção para iterar. Em seguida, vem o bloco de script a ser executado. A variável é criada automaticamente e recebe um valor do array antes de cada execução do loop.
Novamente, para executar o loop cinco vezes, você precisará de uma coleção com cinco itens. Neste caso, esses serão os valores inteiros de 1 a 5:
$collection = 1..5 foreach ($item in $collection) { Write-Host The value of Item is: $item } Write-Host End of foreach loop

A variável é inicializada com o primeiro valor da coleção, que é 1, então o bloco de script é executado. Na próxima iteração, a variável é atribuída com o próximo item no array, que é 2. O bloco de script será processado novamente até que todos os itens na coleção sejam processados.
Por exemplo, se você gostaria de processar os cinco primeiros serviços em execução no seu computador, seu loop ficaria assim:
foreach ($service in (Get-Service | Select-Object -First 5)) { Write-Host Service name is: $service.name and status is $service.status }

Você deve entender que existe uma diferença entre o loop Foreach e o comando Foreach-Object. É fácil confundi-los. Um loop Foreach sempre começa com uma declaração Foreach, enquanto o comando Foreach-Object seguirá um comando com um pipeline à medida que processa os objetos enviados por ele.
Loop While do PowerShell
A instrução While no PowerShell é usada para criar um loop que executa um comando ou um conjunto de comandos se a condição for avaliada como verdadeira. Ela verifica a condição antes de executar o bloco de script. Enquanto a condição for verdadeira, o PowerShell executará o bloco de script até que a condição resulte em falso.

A sintaxe para um loop while é a seguinte:
while (<Condition>){<Script Block>}
Por exemplo, se você tiver uma variável chamada var com um valor inicial de 1 e quiser repetir o loop cinco vezes, o loop deve seguir esta estrutura:
Saiba qual dado sensível está armazenado onde, avalie o risco associado a ele e implemente medidas de proteção de dados baseadas em políticas com DataSecurity Plus, o software de proteção de dados da ManageEngine. Comece hoje com um teste gratuito totalmente funcional de 30 dias.
$var = 1 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

No exemplo acima, a variável é inicializada fora do loop e incrementada no bloco de script. O cmdlet Write-Host é usado para exibir o valor da variável em cada ciclo do loop.
É importante notar que se a condição estiver inicialmente false, então o loop não será acionado. Em nosso exemplo, se tivéssemos um valor para a variável (var = 6), então o comando de loop não teria funcionado e o bloco de script não teria sido executado.
$var = 6 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Você pode usar condições mais complexas usando operadores lógicos. Por exemplo, se você deseja que a variável seja menor que 5 e diferente de 3, o loop ficaria assim:
$var = 1 while ($var -le 5 -and $var -ne 3) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Como mencionado anteriormente, ao usar o operador lógico -and, o resultado é true somente quando ambos os testes condicionais são avaliados como true. Neste caso, quando a variável é atribuída o valor de 3, a segunda condição se torna false: Isso leva a um resultado de false, interrompendo o loop.
Loop Do-While do PowerShell
A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

A sintaxe para um loop Do-While é a seguinte:
do { <script block> } while (<condition>)
Portanto, se usarmos o mesmo exemplo anterior, o código ficaria assim:
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Vamos executar um loop Do-While com um valor para a variável var = 6. Aqui, o loop ainda será executado uma vez antes de verificar que a condição era false.
$var = 6 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Novamente, usar operadores lógicos também é possível. Se usarmos o mesmo exemplo anterior, você verá que o loop para quando o valor da variável for 3 porque queríamos que nossa variável fosse menor que 5 e diferente de 3:
Saiba quais dados sensíveis são armazenados onde, avalie o risco associado a eles e implemente medidas de proteção de dados baseadas em políticas com o DataSecurity Plus, o software de proteção de dados da ManageEngine. Comece hoje mesmo com um teste gratuito totalmente funcional de 30 dias.
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5 -and $var -ne 3) Write-Host End of Do-While loop.

Loop Do-Until do PowerShell
O loop Do-Until funciona da mesma maneira que o loop Do-While: ele executa o bloco de script primeiro e depois avalia a condição. A diferença aqui é que enquanto o loop Do-While entra no loop com uma condição verdadeira, o loop Do-Until procura uma condição falsa para entrar no loop.

A sintaxe para um loop Do-Until é a seguinte:
do { <script block> } until (<condition>)
Como você pode ver, a estrutura parece quase idêntica a um loop Do-While. No entanto, vamos ver qual seria o resultado se continuarmos usando nosso exemplo anterior:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -le 5) Write-Host End of Do-Until loop.

Como o teste condicional avalia verdadeiro, o loop Do-Until não é acionado porque precisamos de um resultado falso para entrar no loop. Neste caso, se você quiser repetir o loop 5 vezes, o operador lógico precisa ser alterado para maior que (-gt), o que fornecerá um resultado falso para as primeiras 5 iterações:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5) Write-Host End of Do-Until loop.

Novamente, como precisamos que a condição inicial seja falsa para entrar e permanecer no loop, isso afetaria também os operadores lógicos se precisássemos definir uma expressão mais complexa.
No exemplo seguinte, devemos usar o operador -or para fazer o loop repetir até que a nossa variável seja maior que 5 (o resultado falso necessário) ou igual a 3. Não poderíamos usar o operador -and, o que exigiria que a variável fosse maior que 5 e igual a 3 ao mesmo tempo, porque resultaria em um loop infinito.
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5 -or $var -eq 3) Write-Host End of Do-Until loop.

Como controlar loops no PowerShell
Você pode controlar o fluxo da execução em um loop usando palavras-chave para sair do loop sem avaliar a condição ou pular a iteração atual do loop. Embora essas palavras-chave possam ser úteis às vezes, nem sempre são recomendadas, pois podem tornar o script mais difícil de ler.
A declaração break
A declaração break interrompe e sai imediatamente do loop atual sem executar o restante do código no bloco do script do loop e sem avaliar a condição especificada. Isso permite que o PowerShell continue executando o restante do código.
A palavra-chave break se comporta da mesma forma, independentemente do tipo de loop usado. Usando um dos exemplos acima, vamos contar de 1 a 5 e sair do loop se a variável de contagem for igual a três. Mas desta vez, vamos adicionar um break em vez de usar operadores lógicos na condição de teste.
Compreenda onde são armazenados os dados sensíveis, avalie o risco associado a eles e implemente medidas de proteção de dados baseadas em políticas com DataSecurity Plus, o software de proteção de dados da ManageEngine. Inicie hoje com um teste gratuito de 30 dias totalmente funcional.
Para conseguir isso, o if statement será usado para definir os critérios de saída.
For ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {break} Write-Host The value of Var is: $var } Write-Host End of for loop.

Quando o valor da variável de contagem for igual a 3, a instrução if é ativada e o break é executado como palavra-chave. Como a palavra-chave break está antes do comando Write-Host no bloco de script, o último não será processado. O loop para e o script continua a executar o código restante.
A instrução continue
A instrução continue permite que você pule a parte restante do código, retornando você ao início do loop sem sair dele.
Como no exemplo anterior, um loop For será usado, mas desta vez, em vez de sair do loop quando a variável de contagem atingir 3, o PowerShell irá pular o restante do código para a iteração atual e prosseguir com o loop até o teste condicional ser falso.
for ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {Continue} Write-Host The value of Var is: $var } Write-Host End of for loop.

Como você pode ter notado, quando o valor da variável é igual a 3, a declaração if é acionada, executando a declaração continue. Ele então pula o restante do código dentro do loop sem encerrá-lo.
Conclusão
O PowerShell suporta vários tipos de loops, e é realmente importante entender como eles podem ajudá-lo a simplificar seus scripts e repetir certas ações de maneira consistente. Nós cobrimos dicas e truques do PowerShell de forma abrangente no Petri, então certifique-se de conferir nossos outros guias sobre como escrever scripts do PowerShell e como usar a opção ForEach Parallel.
Artigo relacionado:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/