about_Continue

Korte beschrijving

Beschrijft hoe de continue instructie onmiddellijk de programmastroom naar de bovenkant van een programmalus, een switch instructie of een instructie retourneert trap .

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.

Continue in lussen gebruiken

Een niet-gelabelde continue instructie retourneert onmiddellijk de programmastroom naar de bovenkant van de binnenste lus die wordt beheerd door foreen -, foreach``do-, - of -whileinstructie. De huidige iteratie van de lus wordt beëindigd en de lus gaat door 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 lus for gebruikt, wordt de uitvoering voortgezet bij de <Repeat> -instructie, gevolgd door de <Condition> test. In het onderstaande voorbeeld treedt er geen oneindige lus op omdat de afloop $i van plaatsvindt na het trefwoord continue .

#   <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--
    }
}

Met behulp van een gelabeld doorgaan in een lus

Een gelabelde continue instructie beëindigt de uitvoering van de iteratie en draagt het besturingselement over naar het doelinsluitende iteratie switch - of instructielabel.

In het volgende voorbeeld wordt de binnenste for beëindigd $condition wanneer Waar is en de 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
            }
        }
    }
}

Continue gebruiken in een switch-instructie

Een niet-gelabelde continue instructie in een switch switch beëindigt de uitvoering van de huidige iteratie en brengt het besturingselement over naar de bovenkant van de switch om het volgende invoeritem op te halen.

Wanneer er één invoeritem is, continue wordt de hele instructie switch afgesloten. Wanneer de switch invoer een verzameling is, test de switch elk element van de verzameling. De continue sluit de huidige iteratie af en gaat switch door met het volgende element.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

Continue gebruiken in een trap-instructie

Als de laatste instructie die in trap de body wordt uitgevoerd, een -instructie is continue, trap wordt de vastgesloten fout op de stille kracht genegeerd en wordt de uitvoering voortgezet met de instructie direct na de instructie die heeft veroorzaakt.

Gebruik continue niet buiten een lus, switch of trap

Wanneer continue wordt gebruikt buiten een constructie die deze rechtstreeks ondersteunt (lussen, switch, trap), zoekt PowerShell de aanroepstack voor een omsluitende constructie. Als er geen omsluitende constructie wordt gevonden, wordt de huidige runspace beëindigd.

Dit betekent dat functies en scripts continue die per ongeluk een buiten een omsluitende constructie gebruiken die dit ondersteunt, per ongeluk hun aanroepers kunnen beëindigen.

Als continue u binnen een pijplijn gebruikt, zoals een ForEach-Object scriptblok, wordt niet alleen de pijplijn afgesloten, maar wordt mogelijk ook de hele runspace beëindigd.

Zie ook