Como Usar o Loop For, Loop While e Outros Loops no PowerShell

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.

PowerShell For Loop

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:

Proteção de Dados

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.

Learn More

for ($var = 1; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
A PowerShell loop repeating the same operation five times

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.
If the initial condition if false, the loop won’t be executed

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.
We added another condition to stop the script when the variable reaches a false state.

Como mencionado anteriormente, você pode executar um ou mais comandos nos marcadores e . No exemplo abaixo, temos uma variável $var1 com um valor inicial de 1, que é incrementado, e seu valor é avaliado para testar se é menor ou igual a 5.

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.
Two different variables are being updated 

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:

Proteção de Dados

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.

Learn More

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
We ran a PowerShell ForEach loop with a collection of five items.

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

}
This script shows the first five services working on our computer

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.

Diagram showing how a PowerShell While loop works

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:

Proteção de Dados

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.

Learn More

$var = 1

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Example of a loop running five times

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.
The result of the loop if the initial condition is false

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.
Running the loop with a variable we want to be less than 5 and not equal to 3

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.

Diagram showing how a PowerShell Do-While loop works

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.
Running a 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.
The script was still executed even though the initial condition was false.

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:

Proteção de Dados

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.

Learn More

$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.
The script stops because we wanted our variable to be less than 5 and not equal to 3

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.

Diagram showing how a PowerShell Do-Until loop works

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.
The Do-Until loop is not triggered as it needs an initial false result

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.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the 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.
We use the -or operator to have the Do-Until loop repeat until our variable is greater than 5 or equal to 3

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.

Proteção de Dados

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.

Learn More

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.
We’ve used a break statement instead of using logical operators to stop the script

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.
The if statement is triggered when the value of the variable is equal to 3

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/