2012-03-23 15 views

risposta

15

Perché continue e break sono destinati ai loop e foreach-object è un cmdlet. Il comportamento non è esattamente quello che ti aspetti, perché è solo l'arresto dell'intero script (aggiungi una dichiarazione dopo il codice originale e vedrai che quella dichiarazione non viene eseguita)

Per ottenere un effetto simile a quello utilizzato in un ciclo foreach, è possibile utilizzare return:

$arr = @(1..10) 
$arr | ForEach-Object { 
    if ($_ -eq 5){ return} 
    "output $_" 
} 
5

è perché la continua viene applicata al ciclo foreach ($ foreach elemento in $ raccolta) e non nel cmdlet foreach-oggetto. provare questo:

$arr = @(1..10) 
$arr | ForEach-Object { 
    if ($_ -eq 5){ return} 
    "output $_" 
} 

e questo:

$arr = @(1..10) 
ForEach ($i in $arr) { 
    if ($i -eq 5){ continue} 
    "output $i" 
} 
Problemi correlati