Neste tutorial PowerShell mostramos-lhe como usar o loop For, o loop ForEach-Object, e os loops While, Do-While e Do-Until.
Loops PowerShell, no seu mais básico, basta repetir o mesmo conjunto de comandos um determinado número de vezes. Ideal para executar acções consistentes durante um determinado período de tempo ou um determinado número de registos, os loops podem simplificar os seus scripts de uma forma grande. PowerShell em particular apresenta um número de cmdlets — nomeadamente aqueles que começam com o verbo Get — que devolvem objectos contendo um grande número de dados semelhantes.
Existem vários tipos de loops disponíveis no PowerShell, e em muitos casos mais do que uma técnica de loop pode ser utilizada eficazmente. Por vezes, é necessário determinar o tipo de laço mais eficiente, quer do ponto de vista do desempenho ou da legibilidade do código.
ForEach-Object Loop
Em muitos casos, a melhor forma de fazer o laço através de um objecto é utilizando a cmdlet ForEach-Object (anteriormente discutida no nosso artigo sobre o trabalho com objectos PowerShell). No mais simples, ForEach-Object requer apenas um objecto a ser atravessado em loop e um bloco de script contendo os comandos a serem executados em cada membro do objecto.
Estes parâmetros podem ser especificados pelos nomes dos parâmetros -InputObject e -Processar, ou por canalização do objecto para a cmdlet do ForEach-Object e colocação do bloco de script como o primeiro parâmetro. Para ilustrar esta sintaxe básica, o exemplo seguinte mostra dois métodos de utilização do ForEach-Object para percorrer o conteúdo da pasta Documentos de um utilizador:
$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File
$myDocuments | ForEach-Object {$_.FullName}
ForEach-Object -InputObject $myDocuments -Process {$_.FullName}
Em certos cenários pode ser benéfico executar uma ou mais acções imediatamente antes ou imediatamente depois da execução do loop. Os parâmetros -Begin e -End podem ser utilizados para definir blocos de script a executar imediatamente antes ou depois do conteúdo do bloco -Processar script. Isto pode ser usado para definir ou modificar uma variável antes ou depois da execução do loop.
ForEach-Object tem dois apelidos, ForEach e %, e também suporta a sintaxe de abreviatura a partir do PowerShell 3.0. Os três exemplos seguintes são idênticos em função.
Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | % FreeSpace
PowerShell For Loop
Para loops são tipicamente usados para iterar através de um conjunto de comandos um número especificado de vezes, quer para passar por uma matriz ou objecto, ou apenas para repetir o mesmo bloco de código, conforme necessário. A For loop é construído definindo o valor de uma variável ao entrar no loop, a condição em que o loop deve ser terminado, e uma acção a ser executada contra essa variável de cada vez através do loop.
O exemplo seguinte mostra um Para loop básico utilizado para criar uma tabela de multiplicação:
For ($i=0; $i -le 10; $i++) {
“10 * $i = ” + (10 * $i)
}
For loops podem ser utilizados para passar através de valores do array definindo o valor inicial para o índice inicial do array e aumentando incrementalmente o valor até que o comprimento do array seja cumprido. O índice do array é especificado colocando a variável incremental dentro de parênteses rectos imediatamente a seguir ao nome da variável, como mostrado no exemplo seguinte:
$colors = @(“Red”, “Orange”, “Yellow”, “Green”, “Blue”, “Indigo”, “Violet”)
for ($i=0; $i -lt $colors.Comprimento; $i++) {
$colors
}
While, Do-While, e Do-Until Loops
Um terceiro tipo de laço que a PowerShell suporta envolve a definição de uma condição que ou permite que o laço seja processado desde que a condição seja verdadeira ou até que seja cumprida. Enquanto e Do-While loops são ambos utilizados para executar uma acção enquanto a condição avalia para $true, e diferem apenas na sua sintaxe. Os loops Do-Until têm uma sintaxe semelhante à do Do-While, mas param o processamento assim que a declaração da condição é cumprida.
Do-While e os loops Do-Until começam ambos com a palavra-chave Do, seguida pela palavra-chave da condição (While ou Until) e a condição. Como exemplo, os dois loops seguintes funcionam de forma idêntica, apenas a condição é invertida:
$i=1
Do {
$i
$i++
br>>br>hile ($i -le 10)$i=1
Do {
$i
$i++
}
Until ($i -gt 10)
hile loops performam de forma idêntica a Do-While loops, apenas a sintaxe é ligeiramente alterada. Enquanto os loops utilizam apenas a palavra-chave While, seguida da condição, e finalmente o bloco do guião. Este laço é idêntico em função dos exemplos anteriores, e utiliza a mesma condição que o laço Do-While:
$i=1
hile ($i -le 10)
{
$i
$i++
}
Todos estes três tipos de loop — Do-While, Do-Until, e While loops — também podem ser usados para loop indefinidamente; While e Do-While loops com a condição definida para $true e Do-Until com a condição definida para $false.
Em algumas situações pode ser necessário sair cedo de um laço com base em algo diferente da condição de laço. Neste caso, a palavra-chave Break pode ser invocada para sair do laço. Este exemplo final mostra a mesma funcionalidade, mas utiliza um laço infinito e a palavra-chave Break para sair no momento apropriado:
$i=1
enquanto ($true)
{
$i
$i++
if ($i -gt 10) {
Break
>br>}