Hoe PowerShell For Loop, While Loop en andere loops te gebruiken

In dit artikel zullen we de PowerShell For-lussen, While-lussen, Do-While-lussen en Do-Until-lussen bekijken. Ik zal uitleggen hoe PowerShell-lussen zijn opgebouwd en hoe voorwaarden gedefinieerd worden om een lus in te gaan of te verlaten.

PowerShell For-lus

De For-lus is een tellende lus, en wordt meestal gebruikt wanneer je een taak een bepaald aantal keren moet herhalen, een verzameling moet verwerken, of items moet specificeren aan de hand van een indexnummer. De lus herhaalt zolang de testvoorwaarde evalueert naar true en stopt bij false.

PowerShell For Loop

De syntaxis voor een For-lus is als volgt:

for (<Init>; <Condition>; <Repeat>) {

<Script Block>

}
  • De <Init> sectie voert een opdracht of een reeks opdrachten uit voordat de lus begint. Meestal is dit de plaats waar je de tellende variabele initialiseert.
  • In de <Voorwaarde> sectie evalueer je de conditionele test. Als het true is, ga je de lus in en voer je de opdrachten uit in het scriptblok. Dan wordt de voorwaarde opnieuw geëvalueerd totdat deze resulteert in false.
  • De <Herhalen> aanduiding voert een of meer opdrachten uit, gescheiden door komma’s bij elke lusiteratie. Meestal wordt dit gebruikt om de tellende variabele te wijzigen.

Als je een specifieke bewerking vijf keer wilt herhalen, gebruik dan het volgende voorbeeld:

Gegevensbescherming

Weet welke gevoelige data waar is opgeslagen, beoordeel het risico dat ermee gepaard gaat, en implementeer op beleid gebaseerde gegevensbeschermingsmaatregelen met DataSecurity Plus, de gegevensbeschermingssoftware van ManageEngine. Begin vandaag nog met een volledig functionele, gratis proefperiode van 30 dagen.

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

Hier wordt de variabele geïnitialiseerd met een waarde van 1, wat minder is dan 5, dus ga je de lus in en voer je het scriptblok uit. Bij elke iteratie wordt de waarde van de variabele met 1 verhoogd en beoordeeld tegen de voorwaarde totdat het resultaat false is.

Omdat de voorwaarde aan het begin wordt geëvalueerd, als het resultaat false is, zal het commandoblok niet worden uitgevoerd:

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

Indien nodig kunt u logische operators gebruiken om meer voorwaarden te specificeren. In dit geval hebben we meerdere voorwaarden toegevoegd. En omdat de logische operator -and resulteert in true alleen wanneer beide voorwaarden true zijn, stopt de lus wanneer de expressie $var -ne 3 een false status bereikt.

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.

Zoals eerder vermeld, kunt u een of meer commando’s uitvoeren in de <Init> en <Herhaal> placeholders. In het onderstaande voorbeeld hebben we een variabele $var1 met een initiële waarde van 1, die wordt verhoogd, en de waarde ervan wordt geëvalueerd om te testen of deze kleiner dan of gelijk aan 5 is.

Echter, we hebben ook een tweede variabele, $var2. Het heeft een initiële waarde van 5, die wordt verlaagd maar niet wordt geëvalueerd als onderdeel van de voorwaarde.

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 

Hoe PowerShell-lusvoorwaarden definiëren

In PowerShell worden commando’s sequentieel uitgevoerd. Maar soms moet je een commando of een reeks commando’s herhalen totdat aan een bepaalde voorwaarde is voldaan. Dit wordt een lus genoemd.

Om te definiëren wat de voorwaarden zijn om een lus in te gaan of te verlaten in PowerShell, moet je vergelijkingsoperators gebruiken. Ze stellen je in staat waarden te vergelijken of een waarde te vinden die overeenkomt met een specifiek patroon. Het resultaat is een Boolean-waarde ( waar of onwaar), die wordt geëvalueerd door de luslogica.

Je kunt vergelijkingsoperators gebruiken om numerieke waarden te vergelijken:

Operation Result
2 -eq 2 True
2 -eq 5 False
3 -gt 7 True
5 -lt 3 False

Je kunt ook tekstwaarden vergelijken met vergelijkingsoperators:

Data Protection

Weet welke gevoelige data waar is opgeslagen, beoordeel het risico dat ermee gepaard gaat en implementeer op beleid gebaseerde datasecuritymaatregelen met DataSecurity Plus, ManageEngine’s datasecuritysoftware. Begin vandaag nog met een volledig functionele, gratis proefversie van 30 dagen.

Learn More

Operation Result
‘PowerShell’ -eq ‘powershell’ True
‘PowerShell’ -eq ‘cmd’ False
‘PowerShell’ -like ‘power*’ True
‘PowerShell’ -notlike ‘*shell’ False

PowerShell Foreach-lus

De Foreach-lus wordt gebruikt om door items in een collectie te itereren. In dit scenario heb je geen voorwaarde om te evalueren, maar de lus herhaalt zich totdat alle items in de collectie zijn verwerkt.

<Figure Foreach_Diagram.png>

The syntax for a Foreach loop is the following:

foreach ($<item> in $<collection) {

<Script Block>

}

Hier beginnen we met de foreach-verklaring, gevolgd door haken met een variabele en een collectie om te itereren. Vervolgens komt het scriptblok dat moet worden uitgevoerd. De variabele wordt automatisch aangemaakt en krijgt een waarde toegewezen vanuit de array vóór elke uitvoering van de lus.

Om de lus bijvoorbeeld vijf keer uit te voeren, heb je een collectie nodig met vijf items. In dit geval zullen dit de gehele getallen zijn van 1 tot 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.

De variabele wordt geïnitialiseerd met de eerste waarde van de collectie, die 1 is, dan wordt het scriptblok uitgevoerd. Bij de volgende iteratie krijgt de variabele de volgende item in de array toegewezen, dat is 2. Het scriptblok zal steeds opnieuw worden verwerkt totdat alle items in de collectie zijn verwerkt.

Als je bijvoorbeeld de eerste vijf services die op je computer actief zijn wilt verwerken, zal je lus er als volgt uitzien:

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

Je moet begrijpen dat er een verschil is tussen de Foreach-lus en het commando Foreach-Object. Het is gemakkelijk om ze door elkaar te halen. Een Foreach-lus begint altijd met een Foreach-verklaring, terwijl het Foreach-Object commando een commando zal volgen met een pipeline terwijl het de objecten verwerkt die er doorheen worden gestuurd.

PowerShell While-lus

De While-verklaring in PowerShell wordt gebruikt om een lus te maken die een opdracht of een reeks opdrachten uitvoert als de voorwaarde evalueert naar true. Het controleert de voorwaarde voordat het scriptblok wordt uitgevoerd. Zolang de voorwaarde true is, zal PowerShell het scriptblok uitvoeren totdat de voorwaarde resulteert in false.

Diagram showing how a PowerShell While loop works

De syntaxis voor een while-lus is als volgt:

while (<Condition>){<Script Block>}

Bijvoorbeeld, als je een variabele genaamd var hebt met een initiële waarde van 1 en je de lus vijf keer wilt herhalen, moet de lus deze structuur volgen:

Dataprotectie

Weet welke gevoelige gegevens waar zijn opgeslagen, beoordeel het risico dat ermee gepaard gaat en implementeer op beleid gebaseerde dataprotectiemaatregelen met DataSecurity Plus, de dataprotectiesoftware van ManageEngine. Begin vandaag nog met een volledig functionele, gratis proefperiode van 30 dagen.

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

In het bovenstaande voorbeeld wordt de variabele geïnitialiseerd buiten de lus en geïncrementeerd in het scriptblok. De Write-Host cmdlet wordt gebruikt om de waarde van de variabele uit te voeren bij elke cyclus van de lus.

Het is belangrijk op te merken dat als de voorwaarde aanvankelijk false is, de lus niet zal worden gestart. In ons voorbeeld, als we een waarde hadden voor de variabele (var = 6), dan zou het luscommando helemaal niet hebben gewerkt en zou het scriptblok niet zijn uitgevoerd.

$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

U kunt complexere voorwaarden gebruiken met logische operatoren. Als u bijvoorbeeld wilt dat de variabele kleiner is dan 5 en niet gelijk is aan 3, zou de lus er als volgt uitzien:

$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

Zoals eerder vermeld, wanneer de logische operator -and wordt gebruikt, is het resultaat true alleen wanneer beide voorwaardelijke tests worden geëvalueerd als true. In dit geval, wanneer de variabele de waarde 3 krijgt toegewezen, wordt de tweede voorwaarde false: Dit leidt tot een false resultaat, waardoor de lus stopt.

PowerShell Do-While lus

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

De syntaxis voor een Do-While lus is als volgt:

do {

<script block>

} while (<condition>)

Dus, als we hetzelfde voorbeeld als voorheen gebruiken, zou de code er als volgt uitzien:

$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

Laten we een Do-While lus uitvoeren met een waarde voor de variabele var = 6. Hier zal de lus nog steeds een keer worden uitgevoerd voordat gecontroleerd wordt dat de voorwaarde false was.

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

Nogmaals, het is ook mogelijk om logische operatoren te gebruiken. Als we hetzelfde voorbeeld als voorheen gebruiken, zult u zien dat de lus stopt wanneer de waarde van de variabele 3 is omdat we wilden dat onze variabele kleiner is dan 5 en niet gelijk aan 3:

Data Bescherming

Weet welke gevoelige gegevens waar zijn opgeslagen, beoordeel het bijbehorende risico en implementeer op beleid gebaseerde gegevensbeschermingsmaatregelen met DataSecurity Plus, de software voor gegevensbescherming van ManageEngine. Begin vandaag nog met een volledig functionele, 30-daagse gratis proefperiode.

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

PowerShell Do-Until-lus

De Do-Until-lus werkt op dezelfde manier als de Do-While-lus: het voert eerst het scriptblok uit en evalueert vervolgens de voorwaarde. Het verschil hier is dat terwijl de Do-While-lus de lus betreedt met een true-voorwaarde, de Do-Until-lus op zoek is naar een false-voorwaarde om de lus in te gaan.

Diagram showing how a PowerShell Do-Until loop works

De syntaxis voor een Do-Until-lus is als volgt:

do {

<script block>

} until (<condition>)

Zoals je ziet, ziet de structuur er bijna identiek uit aan een Do-While-lus. Laten we echter eens kijken wat het resultaat zou zijn als we ons eerdere voorbeeld blijven gebruiken:

$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

Omdat de voorwaardelijke test evalueert naar true, wordt de Do-Until-lus niet geactiveerd omdat we een false-resultaat nodig hebben om de lus in te gaan. In dit geval, als je de lus 5 keer wilt herhalen, moet de logische operator worden gewijzigd naar groter dan (-gt), wat een fout resultaat zal opleveren voor de eerste 5 iteraties:

$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

Opnieuw, aangezien we de initiële voorwaarde als false moeten hebben om de lus in te gaan en te blijven, zou dit ook van invloed zijn op logische operatoren als we een complexere expressie zouden moeten definiëren.

In het volgende voorbeeld moeten we de -of operator gebruiken om de lus te herhalen totdat onze variabele groter is dan 5 (het vereiste valse resultaat) of gelijk is aan 3. We konden de -en operator niet gebruiken, die zou vereisen dat de variabele tegelijkertijd groter is dan 5 en gelijk is aan 3 omdat dit zou resulteren in een oneindige lus.

$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

Hoe PowerShell-lussen te controleren

U kunt de uitvoeringsstroom in een lus beheren met trefwoorden om de lus af te sluiten zonder de voorwaarde te evalueren of om de huidige iteratie van de lus over te slaan. Hoewel die trefwoorden soms handig kunnen zijn, worden ze niet altijd aanbevolen omdat ze het script moeilijker leesbaar kunnen maken.

De break-verklaring

De break verklaring stopt en verlaat onmiddellijk de huidige lus zonder de rest van de code in het scriptblok van de lus uit te voeren, en zonder de gespecificeerde voorwaarde te evalueren. Dit maakt het mogelijk voor PowerShell om door te gaan met het uitvoeren van de rest van de code.

De break-trefwoord gedraagt zich hetzelfde ongeacht het type lus dat wordt gebruikt. Met behulp van een van de bovenstaande voorbeelden, zullen we tellen van 1 tot 5 en de lus verlaten als de telvariabele gelijk is aan drie. Maar deze keer zullen we een break toevoegen in plaats van logische operators te gebruiken in de testvoorwaarde.

Gegevensbescherming

Weet welke gevoelige gegevens waar zijn opgeslagen, beoordeel het risico dat eraan verbonden is, en implementeer op beleid gebaseerde gegevensbeschermingsmaatregelen met DataSecurity Plus, de gegevensbeschermingssoftware van ManageEngine. Begin vandaag nog met een volledig functionele, gratis proefperiode van 30 dagen.

Learn More

Om dit te bereiken, zal de if-verklaring worden gebruikt om de afsluitcriteria te definiëren.

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

Wanneer de waarde van de telvariabele gelijk is aan 3, wordt de if-verklaring geactiveerd en wordt het break-trefwoord uitgevoerd. Omdat het break-trefwoord vóór het Write-Host-commando in het scriptblok is geplaatst, wordt het laatste niet verwerkt. De lus stopt en het script gaat verder met het uitvoeren van de overige code.

De continue-verklaring

De continue-verklaring stelt je in staat om het resterende deel van de code over te slaan en je terug te brengen naar het begin van de lus zonder deze te verlaten.

Zoals in het vorige voorbeeld zal een For-lus worden gebruikt, maar deze keer zal PowerShell de rest van de code voor de huidige iteratie overslaan in plaats van de lus te verlaten wanneer de teller de 3 bereikt, en zal doorgaan met de lus totdat de conditionele test false is.

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

Zoals je misschien hebt opgemerkt, wanneer de waarde van de variabele gelijk is aan 3, wordt de if-verklaring geactiveerd en wordt de continue-verklaring uitgevoerd. Vervolgens wordt de rest van de code binnen de lus overgeslagen zonder deze te onderbreken.

Conclusie

PowerShell ondersteunt verschillende soorten lussen, en het is echt belangrijk om te begrijpen hoe ze je kunnen helpen bij het vereenvoudigen van je scripts en het herhalen van bepaalde acties op een consistente manier. We hebben uitgebreid PowerShell-tips en -trucs behandeld op Petri, dus zorg ervoor dat je onze andere gidsen bekijkt over hoe je PowerShell-scripts schrijft en hoe je de ForEach Parallel-optie gebruikt.

Gerelateerd artikel:

Source:
https://petri.com/how-to-use-powershell-for-while-loops/