PowerShell gotcha - foreach keyword vs. foreach-object cmdlet

This came up on an internal mailing list and I thought others may find it interesting.  Here was my response.

You’re confusing the foreach keyword with the foreach-object cmdlet – Bruce’s book does an excellent job discussing the differences.

“continue” in your case is looking up the stack for a loop to exit and doesn’t find one, so it exits fully.

 

C:\Users\jmanning\Documents\bin\tfs # 1,2,3 | foreach-object { if ($_ -eq 2) { continue } ; $_ }

1

C:\Users\jmanning\Documents\bin\tfs # foreach ($i in 1,2,3) { if ($i -eq 2) { continue } ; $i }

1

3