Delen via


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- doof 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 $conditionTrue 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 continuede 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.

Zie ook