about_Continue
Korte beschrijving
Beschrijft hoe de continue
instructie de programmastroom onmiddellijk naar het begin van een programmalus, een switch
instructie of een trap
instructie retourneert.
Lange beschrijving
De continue
instructie biedt een manier om het huidige besturingsblok af te sluiten, maar door te gaan met de uitvoering in plaats van volledig af te sluiten. De instructie ondersteunt labels.
Een label is een naam die u toewijst aan een instructie in een script.
Doorgaan in lussen gebruiken
Een niet-gelabelde instructie retourneert continue
onmiddellijk de programmastroom naar de bovenkant van de binnenste lus die wordt beheerd door een for
- , foreach
- do
of while
-instructie. De huidige iteratie van de lus wordt beëindigd en de lus gaat verder met de volgende iteratie.
In het volgende voorbeeld keert de programmastroom terug naar de bovenkant van de while
lus als de $ctr
variabele gelijk is aan 5. Als gevolg hiervan worden alle getallen tussen 1 en 10 weergegeven, met uitzondering van 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
Wanneer u een for
lus gebruikt, gaat de uitvoering verder met de <Repeat>
instructie, gevolgd door de <Condition>
test. In het onderstaande voorbeeld vindt geen oneindige lus plaats omdat de degradatie van $i
plaatsvindt na het continue
trefwoord.
# <Init> <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
Write-Host -Object $i
if ($i -eq 5)
{
continue
# Will not result in an infinite loop.
$i--
}
}
Een gelabeld doorgaan in een lus gebruiken
Een gelabelde continue
instructie beëindigt de uitvoering van de iteratie en draagt de controle over naar het label voor de betreffende omsluitende iteratie of switch
instructie.
In het volgende voorbeeld wordt de binnenste for
beëindigd wanneer $condition
True is en wordt de iteratie voortgezet met de tweede for
lus op labelB
.
:labelA for ($i = 1; $i -le 10; $i++) {
:labelB for ($j = 1; $j -le 10; $j++) {
:labelC for ($k = 1; $k -le 10; $k++) {
if ($condition) {
continue labelB
} else {
$condition = Update-Condition
}
}
}
}
Doorgaan gebruiken in een switch-instructie
Een niet-gelabelde continue
instructie binnen een switch
beëindigt de uitvoering van de huidige switch
iteratie en verplaatst het besturingselement naar de bovenkant van de switch
om het volgende invoeritem op te halen.
Wanneer er één invoeritem continue
is, wordt de hele switch
instructie afgesloten.
Wanneer de switch
invoer een verzameling is, switch
wordt elk element van de verzameling getest. De continue
sluit de huidige iteratie af en gaat switch
verder met het volgende element.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Doorgaan gebruiken in een trap-instructie
Als de laatste instructie die wordt uitgevoerd in de hoofdtekst een trap
instructie is, wordt continue
de gevangen fout op de achtergrond genegeerd en wordt de uitvoering voortgezet met de instructie direct na de instructie die trap
heeft plaatsgevonden.
Gebruik niet doorgaan buiten een lus, switch of trap
Wanneer continue
wordt gebruikt buiten een constructie die deze rechtstreeks ondersteunt (lussen, switch
, trap
), zoekt PowerShell de aanroepstack op voor een omsluitende constructie. Als er geen insluitende constructie kan worden gevonden, wordt de huidige runspace stil beëindigd.
Dit betekent dat functies en scripts die per ongeluk een buiten een continue
omsluitende constructie gebruiken die deze ondersteunt, hun aanroepers per ongeluk kunnen beëindigen.
Als u continue
binnen een pijplijn gebruikt, zoals een ForEach-Object
scriptblok, wordt niet alleen de pijplijn afgesloten, maar wordt mogelijk ook de hele runspace beëindigd.