Vous avez deux options pour sortir brusquement du pipeline ForEach-Object
en PowerShell:
- Appliquer la logique de sortie dans
Where-Object
d'abord, puis transmettre les objets à Foreach-Object
, ou
- (si possible) convertir
Foreach-Object
en une structure de boucle standard Foreach
.
Voyons des exemples: Les scripts suivants sortent de la boucle Foreach-Object après la 2è itération (c'est-à-dire le pipeline itère seulement 2 fois) :
Solution-1: utilisez le filtre Where-Object
AVANT Foreach-Object
:
[boolean]$exit = $false;
1..10 | Where-Object {$exit -eq $false} | Foreach-Object {
if($_ -eq 2) {$exit = $true} #OU $exit = ($_ -eq 2);
$_;
}
OU
1..10 | Where-Object {$_ -le 2} | Foreach-Object {
$_;
}
Solution-2: Converti Foreach-Object
en une structure de boucle standard Foreach
:
Foreach ($i in 1..10) {
if ($i -eq 3) {break;}
$i;
}
PowerShell devrait vraiment offrir un moyen plus simple de sortir ou de break à l'intérieur du corps d'un pipeline Foreach-Object
. Note: return
ne sort pas, il saute seulement une itération spécifique (similaire à continue
dans la plupart des langages de programmation), voici un exemple de return
:
Write-Host "Ce qui suit sautera une seule itération (effectivement itère 10 fois)";
1..10 | Foreach-Object {
if ($_ -eq 3) {return;} #sauter seulement la 3è itération.
$_;
}