A WHILE és UNTIL segítségével ciklust szervezhetünk. Kétfajta változata is van a WHILE-nak, a „sima” elöl tesztelő, és a DO-WHILE hátul tesztelő, míg az UNTIL-nak csak a DO-UNTIL hátul tesztelő változata létezik. A hátul tesztelő mindenképpen lefut egyszer, az elöl tesztelő akár a belsejének lefuttatása nélkül is továbbléphet, ha az alkalmazott feltétel rögtön hamis. Nézzünk pár példát:
[13] PS C:\> $i = 3
[14] PS C:\> while($i -lt 6)
>> {
>> "*" * $i
>> $i++
>> }
>>
***
****
*****
A WHILE ciklus tehát addig jut, amíg a megfogalmazott feltétel igaz, azaz a példámban amíg az $i kisebb mint 6, addig $i darabszámú csillagot írok ki, és növelem az $i-t. A ciklus 5 csillagnál lép ki, mivel a 6.-nál már nem igaz az, hogy kisebb, mint 5.
És egy hátul tesztelő:
[16] PS C:\> $a=4
[17] PS C:\> do
>> {
>> $a++
>> $a
>> }
>> while ($a -lt 6)
>>
5
6
Itt meg a ciklus 6-nál lépett ki, hiszen a feltétel nem teljesülését csak akkor vette észre, amikor már a ciklus magja lefutott.
Nézzük az DO-UNTIL ciklust:
[18] PS C:\> do{"Nincs billentyű lenyomva."; start-sleep 1}until($host.UI.RawUI
.KeyAvailable)
Nincs billentyű lenyomva.
Nincs billentyű lenyomva.
[19] PS C:\> k
A példában billentyűzetlenyomásig megy a ciklus. Ez tehát csak annyiban különbözik a DO-WHILE-tól, hogy itt a feltétel hamis állapota mellett fut a ciklus, és az igazzá váláskor lép ki.