Поскольку объект For-Each
является командлетом, а не циклом, и continue / break не применяются к нему.
Например, если у вас есть:
$b = 1,2,3
foreach($a in $b){
$a | foreach { if($_ -eq 2) {continue;} else {write-host $_} }
write-host "after"
}
, вы будет выводиться как:
1
after
3
after
Это связано с тем, что continue применяется к внешнему циклу foreach, а не к командлету foreach-object. В отсутствие петли, внешний уровень, поэтому дает вам впечатление, что это действует как разрыв.
Итак, как вы продолжаете, как поведение? Один из способов - это объект-объект:
1..100 | ?{ $_ % 7 -eq 0} | %{write-host $_ is a mutliple of 7}