about_Continue
Korte beschrijving
Beschrijft hoe de continue
instructie direct de programmastroom retourneert boven aan een programmalus, een switch
instructie of een trap
instructie.
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 gebruiken in lussen
Een niet-gelabelde continue
instructie retourneert onmiddellijk de programmastroom naar de bovenkant van de binnenste lus die wordt beheerd door een for
, foreach
of do
while
instructie. De huidige iteratie van de lus wordt beëindigd en de lus wordt voortgezet 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, wordt de uitvoering voortgezet op de <Repeat>
instructie, gevolgd door de <Condition>
test. In het onderstaande voorbeeld wordt een oneindige lus niet uitgevoerd omdat de afschaking $i
na het continue
trefwoord plaatsvindt.
# <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 gelabelde continue in een lus gebruiken
Een gelabelde continue
instructie beëindigt de uitvoering van de iteratie en draagt het besturingselement over naar het beoogde iteratie- of switch
instructielabel.
In het volgende voorbeeld wordt de binnenste for
wordt beëindigd wanneer $condition
waar is en iteratie wordt 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 draagt het besturingselement over aan de bovenkant van het switch
item 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
huidige iteratie wordt afgesloten en het switch
volgende element wordt voortgezet.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Doorgaan gebruiken in een trapinstructie
Als de laatste instructie die in de hoofdtekst wordt uitgevoerd een trap
instructie is continue
, wordt de vastgelopen fout op de achtergrond genegeerd en wordt de uitvoering voortgezet met de instructie onmiddellijk na de instructie die is veroorzaakt trap
.
Gebruik niet doorgaan buiten een lus, switch of trap
Wanneer continue
deze wordt gebruikt buiten een constructie die deze rechtstreeks ondersteunt (lussen, switch
, trap
), zoekt PowerShell de aanroepstack op voor een omsluitconstructie. Als er geen omsluitconstructie kan worden gevonden, wordt de huidige runspace stil beëindigd.
Dit betekent dat functies en scripts die per ongeluk een continue
buiten een insluitende constructie gebruiken die dit ondersteunt, hun bellers per ongeluk kunnen beëindigen.
Als continue
u binnen een pijplijn, zoals een ForEach-Object
scriptblok, niet alleen de pijplijn afsluit, wordt de volledige runspace mogelijk beëindigd.