Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Short description
Describes how the continue statement immediately returns the program flow
to the top of a program loop, a switch statement, or a trap statement.
Long description
The continue statement provides a way to exit the current control block but
continue execution, rather than exit completely. The statement supports labels.
A label is a name you assign to a statement in a script.
Using continue in loops
An unlabeled continue statement immediately returns the program flow to
the top of the innermost loop that is controlled by a for, foreach, do,
or while statement. The current iteration of the loop is terminated and the
loop continues with the next iteration.
In the following example, program flow returns to the top of the while loop
if the $ctr variable is equal to 5. As a result, all the numbers between 1
and 10 are displayed except for 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
When using a for loop, execution continues at the <Repeat> statement,
followed by the <Condition> test. In the example below, an infinite loop
will not occur because the decrement of $i occurs after the continue
keyword.
# <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--
}
}
Using a labeled continue in a loop
A labeled continue statement terminates execution of the iteration and
transfers control to the targeted enclosing iteration or switch statement
label.
In the following example, the innermost for is terminated when $condition
is True and iteration continues with the second for loop at 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
}
}
}
}
Using continue in a switch statement
An unlabeled continue statement within a switch terminates execution of the
current switch iteration and transfers control to the top of the switch to
get the next input item.
When there is a single input item continue exits the entire switch
statement. When the switch input is a collection, the switch tests each
element of the collection. The continue exits the current iteration and the
switch continues with the next element.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Using continue in a trap statement
If the final statement executed in the body a trap statement is continue,
the trapped error is silently ignored and execution continues with the
statement immediately following the one that caused trap to occur.
Do not use continue outside of a loop, switch, or trap
When continue is used outside of a construct that directly supports it
(loops, switch, trap), PowerShell looks up the call stack for an
enclosing construct. If it can't find an enclosing construct, the current
runspace is quietly terminated.
This means that functions and scripts that inadvertently use a continue
outside of an enclosing construct that supports it, can inadvertently terminate
their callers.
Using continue inside a pipeline, such as a ForEach-Object script block,
not only exits the pipeline, it potentially terminates the entire runspace.