PowerShell: break nested loops
break, loops, powershell
Solution
You do not add the colon when using `break` with a loop label. This line:
break :outer
should be written like this:
break outer
For a further demonstration, consider this simple script:
:loop while ($true)
{
while ($true)
{
break :loop
}
}
When executed, it will run forever without breaking. This script however:
:loop while ($true)
{
while ($true)
{
break loop
}
}
exits as it should because I changed `break :loop` to `break loop`.
Problem
There should be a `break` command in PowerShell that can exit nested loops by assigning a label. Just it doesn't work. Here's my code: ``` $timestampServers = @( "http://timestamp.verisign.com/scripts/timstamp.dll", "http://timestamp.comodoca.com/authenticode", "http://timestamp.globalsign.com/scripts/timstamp.dll", "http://www.startssl.com/timestamp" ) :outer for ($retry = 2; $retry -gt 0; $retry--) { Write-Host retry $retry foreach ($timestampServer in $timestampServers) { Write-Host timestampServer $timestampServer & $signtoolBin sign /f $keyFile /p "$password" /t $timestampServer $file if ($?) { Write-Host OK break :outer } } } if ($retry -eq 0) { WaitError "Digitally signing failed" exit 1 } ``` It prints the following: ``` retry 2 timestampServer http://timestamp.verisign.com/scripts/timstamp.dll Done Adding Additional Store Successfully signed and timestamped: C:\myfile.dll OK retry 1 timestampServer http://timestamp.verisign.com/scripts/timstamp.dll Done Adding Additional Store Successfully signed and timestamped: C:\myfile.dll OK ERROR: Digitally signing failed ``` What have I done wrong? Can I have goto and labels, please? Using Windows 7 and I guess PS 2.0. This script is supposed to run on PS 2 at least.