Door Yoeri Lauwers

Eindredacteur

Een introductie tot Windows PowerShell

19-09-2006 • 13:51

47

Singlepage-opmaak

Logische lussen en iteraties

Naast conditionele statements zijn ook lusconstructies vaak een onmisbaar onderdeel van een shellscript. Daarvoor hebben Powershell-scripters twee procedurele loop-statements ter beschikking gekregen. Het eerste is de welbekende for-lus die weinig uitleg behoeft.

PS> for ($i = 0; $i -lt 10; $i++) {
>> "Het kwadraat van " + $i + " bedraagt " + $i * $i
>> }
>>
Het kwadraat van 0 bedraagt 0
Het kwadraat van 1 bedraagt 1
Het kwadraat van 2 bedraagt 4
Het kwadraat van 3 bedraagt 9
Het kwadraat van 4 bedraagt 16
Het kwadraat van 5 bedraagt 25
Het kwadraat van 6 bedraagt 36
Het kwadraat van 7 bedraagt 49
Het kwadraat van 8 bedraagt 64
Het kwadraat van 9 bedraagt 81

Wel interessant om hier te vermelden is de mogelijkheid tot het gebruik van de foreach-lus. Wanneer men door een collectie of lijstje van objecten wil lopen, is het hiermee onnodig in een variabele bij te gaan houden hoeveel items er geëvalueerd moeten worden of te gaan goochelen met exit-condities. Het kan bovendien nog eenvoudiger door het lijstje met objecten gewoon door middel van piping aan het foreach-commando te bezorgen. In dat geval kan de variabele $_ gebruikt worden om naar het huidige element in de for-lus te verwijzen.

PS> foreach ($i in Get-Process) {
>> $i.ProcessName
>> }
>>
AcroRd32
alg
BTTray
btwdins
CLCapSvc
CLMLServer
CLSched
CmUCREye
...
PS> Get-Process | foreach { $_.ProcessName }
AcroRd32
alg
BTTray
btwdins
CLCapSvc
CLMLServer
CLSched
...

Vaak wil men echter niet zomaar een bestaand lijstje doorlopen, maar moet een reeks commando's uitgevoerd worden tot dat aan een bepaalde voorwaarde voldaan is. In die functionaliteit wordt voorzien door de while-lus.

PS> while ( $i -gt 0 ) {
>> $i
>> $i--
>> }
>> "Happy Newyear"
>>
10
9
8
7
6
5
4
3
2
1
Happy Newyear