Neste artigo, iremos analisar os loops For, While, Do-While e Do-Until do PowerShell. 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, utilizado principalmente quando é necessário repetir uma tarefa um certo número de vezes, processar uma coleção ou especificar itens por um número de índice. Ele repete enquanto a condição de teste avalia como verdadeira e sai quando é falsa.

A sintaxe para um Loop For é a seguinte:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- O bloco <Init> executa um comando ou um conjunto de comandos antes do loop começar. Geralmente, este é o lugar onde você inicializa a variável de contagem.
- Na seção <Condition>, você avalia o teste condicional. Se for verdadeiro, você entra no loop e executa os comandos no bloco de script. Em seguida, a condição é avaliada novamente até resultar em falso.
- O marcador <Repeat> 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 exemplo a seguir:
Compreende onde está armazenado qualquer dado sensível, avalia o risco associado a ele e implementa medidas de proteção de dados baseadas em políticas com DataSecurity Plus, o software de proteção de dados da ManageEngine. Inicie agora com um teste gratuito de 30 dias totalmente funcional.
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 o valor 1, que é menor do que 5, portanto, você está entrando no loop e executando o bloco de script. Em cada iteração, o valor da variável é incrementado em 1 e avaliado contra a condição até que o resultado for falso.
Como a condição é avaliada no início, se o resultado for falso, o bloco de comandos 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 condições adicionais. Neste caso, adicionamos várias 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 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 marcadores
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 as condições do 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 quais são 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 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.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
Loop Foreach do PowerShell
O loop Foreach é usado para iterar pelos itens em uma coleção. Nesse cenário, não há uma condição a ser avaliada, mas o loop se repete até que todos os itens na coleção sejam 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 rodar 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ê deseja processar os primeiros cinco serviços que estão funcionando em seu computador, seu loop se parecerá com isso:
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 há 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. Ele 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 falsa.

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 deseja repetir o loop cinco vezes, o loop deve seguir esta estrutura:
Saiba quais dados sensíveis estã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 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 inicial for 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 do 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 desejar que a variável seja menor que 5 e não igual a 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 -e, o resultado é true apenas quando ambos os testes condicionais são avaliados como true. Neste caso, quando a variável é atribuída com o valor de 3, a segunda condição se torna false: Isso leva a um resultado de false, parando 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>)
Então, se usarmos o mesmo exemplo de antes, 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 de antes, você verá que o loop para quando o valor da variável é 3 porque queríamos que nossa variável fosse menor que 5 e não fosse igual a 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 DataSecurity Plus, o software de proteção de dados da ManageEngine. Comece hoje com um teste gratuito de 30 dias totalmente funcional.
$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.

Laço Do-Until PowerShell
O laço Do-Until funciona da mesma forma que o laço Do-While: executa primeiro o bloco de script e depois avalia a condição. A diferença é que enquanto o laço Do-While entra no loop com uma condição verdadeira, o laço Do-Until está procurando por uma condição falsa para entrar no loop.

A sintaxe para um laço Do-Until é a seguinte:
do { <script block> } until (<condition>)
Como você pode ver, a estrutura é quase idêntica a de um laço Do-While. No entanto, vejamos o que aconteceria se continuássemos usando o 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 a avaliação da condição resulta em verdadeiro, o laço Do-Until não é acionado porque precisamos de um resultado falso para entrar no loop. Neste caso, se você quisesse repetir o loop 5 vezes, o operador lógico precisaria ser alterado para maior que (-gt), o que forneceria 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, já que precisamos que a condição inicial seja falsa para entrar e permanecer no loop, isso afetaria também operadores lógicos se tivéssemos que definir uma expressão mais complexa.
No exemplo a seguir, devemos usar o operador -ou para fazer o loop repetir até que nossa variável seja maior que 5 (o resultado falso necessário) ou igual a 3. Não poderíamos usar o operador -e, que teria exigido que a variável fosse maior que 5 e igual a 3 ao mesmo tempo, pois teria resultado 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 de 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 maneira, independentemente do tipo de loop usado. Usando um dos exemplos acima, contaremos de 1 a 5 e sairemos do loop se a variável de contagem for igual a três. Mas desta vez, adicionaremos um break em vez de usar operadores lógicos na condição de teste.
Saiba quais dados sensíveis estã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.
Para alcançar isso, a declaração if será usada para definir o critério 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 é igual a 3, a declaração if é acionada e a palavra-chave break é executada. Como a palavra-chave break é colocada antes do comando Write-Host no bloco de script, este último não será processado. O loop é interrompido e o script continua executando o restante do código.
A declaração continue
A declaração continue permite pular a parte restante do código, retornando ao início do loop sem sair dele.
Como no exemplo anterior, será usado um loop For, 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é que o teste condicional seja 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 instrução if é acionada, executando a instrução continue. Em seguida, ele pula o resto do código dentro do loop sem quebrá-lo.
Conclusão
O PowerShell suporta vários tipos de loops, e é realmente importante entender como eles podem ajudar a simplificar seus scripts e repetir certas ações de maneira consistente. Nós cobrimos dicas e truques do PowerShell extensivamente no Petri, então certifique-se de conferir nossos outros guias sobre como escrever scripts do PowerShell e como usar a opção ForEach Paralelo.
Artigo relacionado:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/