PowerShell-basisbeginselen: Programmeren met lussen

In deze PowerShell-tutorial laten we u zien hoe u de lus For, de lus ForEach-Object, en de lussen While, Do-While en Do-Until gebruikt.

PowerShell-lussen, in hun meest basale vorm, herhalen gewoon dezelfde reeks commando’s een aantal keer. Lussen zijn ideaal voor het uitvoeren van consistente acties gedurende een bepaalde periode of een bepaald aantal records, en kunnen uw scripts aanzienlijk vereenvoudigen. Vooral PowerShell bevat een aantal cmdlets – met name die welke beginnen met het werkwoord Get – die objecten retourneren met grote aantallen vergelijkbare gegevens.

Er zijn verschillende soorten loops beschikbaar in PowerShell, en in veel gevallen kan meer dan één loop-techniek effectief worden gebruikt. Soms is het nodig om het meest efficiënte lustype te bepalen, vanuit het oogpunt van prestaties of leesbaarheid van de code.

ForEach-Object Loop

In veel gevallen is het gebruik van het cmdlet ForEach-Object (eerder besproken in ons artikel over het werken met PowerShell-objecten) de beste manier om een lus door een object te maken. Op zijn eenvoudigst heeft ForEach-Object alleen een object nodig waar doorheen gelust moet worden en een scriptblok met de commando’s die uitgevoerd moeten worden op elk lid van het object.
Deze parameters kunnen worden gespecificeerd door de -InputObject en -Process parameter namen, of door het object te pipen naar het ForEach-Object cmdlet en het script blok als eerste parameter te plaatsen. Ter illustratie van deze basissyntaxis toont het volgende voorbeeld twee methoden om ForEach-Object te gebruiken om door de inhoud van de map Documenten van een gebruiker te lopen:

$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File
$myDocuments | ForEach-Object {$_.FullName}
ForEach-Object -InputObject $myDocuments -Process {$_.FullName}

In bepaalde scenario’s kan het nuttig zijn om één of meerdere acties uit te voeren net voor of net na de lus wordt uitgevoerd. De -Begin en -End parameters kunnen worden gebruikt om scriptblokken te definiëren om uit te voeren net voor of net na de inhoud van het -Process scriptblok. Dit kan worden gebruikt om een variabele in te stellen of te wijzigen voor of na de uitvoering van de lus.

ForEach-Object heeft twee aliassen, ForEach en %, en ondersteunt ook steno-syntaxis die begint in PowerShell 3.0. De volgende drie voorbeelden zijn identiek qua functie.

Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | % FreeSpace

PowerShell For Loop

For loops worden meestal gebruikt om een reeks commando’s een bepaald aantal keren te doorlopen, hetzij om een array of object te doorlopen, hetzij om hetzelfde blok code te herhalen als dat nodig is. Een For-lus wordt geconstrueerd door de waarde van een variabele in te stellen bij het binnengaan van de lus, de voorwaarde waarop de lus moet worden beëindigd, en een actie die moet worden uitgevoerd tegen die variabele elke keer dat de lus wordt doorlopen.

Het volgende voorbeeld toont een basis For-lus die wordt gebruikt om een vermenigvuldigingstabel te maken:

Voor ($i=0; $i -le 10; $i++) {
“10 * $i = ” + (10 * $i)
}

For-lussen kunnen worden gebruikt om door arraywaarden te stappen door de beginwaarde op de beginindex van de array te zetten en de waarde stapsgewijs te verhogen totdat de lengte van de array is bereikt. De array-index wordt gespecificeerd door de oplopende variabele tussen vierkante haken te plaatsen, direct na de variabelenaam, zoals in het volgende voorbeeld:

$colors = @(“Red”, “Orange”, “Yellow”, “Green”, “Blue”, “Indigo”, “Violet”)
Voor ($i=0; $i -lt $colors.Length; $i++) {
$kleuren
}

While, Do-While, en Do-Until-lussen

Een derde type lus die PowerShell ondersteunt, houdt in dat er een voorwaarde wordt ingesteld die de lus laat doorlopen zolang de voorwaarde waar is of totdat aan de voorwaarde wordt voldaan. Terwijl- en Do-While-lussen worden beide gebruikt om een actie uit te voeren terwijl de voorwaarde evalueert als $true, en verschillen alleen in hun syntaxis. Do-Until lussen hebben een vergelijkbare syntaxis als Do-While, maar stoppen met verwerken zodra aan de voorwaarde is voldaan.

Do-While en Do-Until lussen beginnen beide met het Do sleutelwoord voor een scriptblok, gevolgd door het voorwaarde sleutelwoord (While of Until) en de voorwaarde. De volgende twee lussen werken bijvoorbeeld identiek, alleen is de voorwaarde omgedraaid:

$i=1
Do {
$i
$i++
}
While ($i -le 10)

$i=1
Do {
$i
$i++
}
Until ($i -le 10)

$i=1
Do {
$i
$i++
}
Until ($i -le 10).gt 10)

While-lussen werken identiek aan Do-While-lussen, alleen de syntaxis is iets veranderd. Terwijl lussen alleen het While sleutelwoord gebruiken, gevolgd door de voorwaarde, en tenslotte het scriptblok. Deze lus is qua functie identiek aan de voorgaande voorbeelden, en gebruikt dezelfde voorwaarde als de Do-While lus:

$i=1
While ($i -le 10)
{
$i
$i++
}

Elke van deze drie lustypen — Do-While, Do-Until, en While-lussen — kan ook worden gebruikt om oneindig door te lussen; While- en Do-While-lussen met de voorwaarde op $true en Do-Until met de voorwaarde op $false.

In sommige situaties moet je een lus voortijdig beëindigen op basis van iets anders dan de voorwaarde van de lus. In dat geval kan het Break keyword worden aangeroepen om de lus te verlaten. Dit laatste voorbeeld toont dezelfde functionaliteit, maar gebruikt een oneindige lus en het Break sleutelwoord om de lus op het juiste moment te verlaten:

$i=1
While ($true)
{
$i
$i++
if ($i -gt 10) {
Break
}
}

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *