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, foreachof dowhile 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.

Zie ook