Como usar loops For, While e outros loops no PowerShell

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.

PowerShell For Loop

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:

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 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.

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

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.
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 espaços reservados 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 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:

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 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.

Learn More

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
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ê 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

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

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.

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 quiser repetir o loop cinco vezes, o loop deve seguir esta estrutura:

Proteção de Dados

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.

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 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.
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 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.
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 -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.

Diagram showing how a PowerShell Do-While loop works

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.
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 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:

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 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

$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

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.

Diagram showing how a PowerShell Do-Until loop works

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

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.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the 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.
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 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.

Proteção de Dados

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.

Learn More

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

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.
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 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/