À propos de Break
Description courte
Décrit une instruction que vous pouvez utiliser pour quitter foreach
immédiatement les instructions , while
for
, do
, , switch
ou trap
.
Description longue
L’instruction break
fournit un moyen de quitter le bloc de contrôle actuel.
L’exécution se poursuit à l’instruction suivante après le bloc de contrôle. L’instruction prend en charge les étiquettes. Une étiquette est un nom que vous affectez à une instruction dans un script.
Utilisation de boucles d’arrêt
Lorsqu’une break
instruction apparaît dans une boucle, telle qu’une foreach
boucle , for
, do
ou while
, PowerShell quitte immédiatement la boucle.
Une break
instruction peut inclure une étiquette qui vous permet de quitter les boucles incorporées. Une étiquette peut spécifier n’importe quelle boucle mot clé, comme foreach
, for
ou while
, dans un script.
L’exemple suivant montre comment utiliser une break
instruction pour quitter une for
instruction :
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
Dans cet exemple, l’instruction break
quitte la for
boucle lorsque la $i
variable est égale à 1. Même si l’instruction prend la for
valeur True jusqu’à ce $i
que soit supérieur à 10, PowerShell atteint l’instruction break la première fois que la for
boucle est exécutée.
Il est plus courant d’utiliser l’instruction break
dans une boucle où une condition interne doit être remplie. Prenons l’exemple d’instruction suivant foreach
:
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
if ($val -eq 30) {
break
}
$i++
}
Write-Host "30 was found in array index $i"
Dans cet exemple, l’instruction foreach
itère le $varB
tableau. L’instruction if
prend la valeur False les deux premières fois que la boucle est exécutée et la variable $i
est incrémentée de 1. La troisième fois que la boucle est exécutée, $i
est égale à 2, et la $val
variable est égale à 30. À ce stade, l’instruction s’exécute break
et la foreach
boucle se ferme.
Utilisation d’un saut étiqueté dans une boucle
Une break
instruction peut inclure une étiquette. Si vous utilisez le break
mot clé avec une étiquette, PowerShell quitte la boucle étiquetée au lieu de quitter la boucle actuelle.
L’étiquette est un signe deux-points suivi d’un nom que vous attribuez. L’étiquette doit être le premier jeton d’une instruction, et elle doit être suivie de la boucle mot clé, par while
exemple .
break
déplace l’exécution hors de la boucle étiquetée. Dans les boucles incorporées, cela a un résultat différent de celui de l’mot clé break
lorsqu’il est utilisé par lui-même. Cet exemple contient une while
instruction avec une for
instruction :
:myLabel while (<condition 1>) {
for ($item in $items) {
if (<condition 2>) {
break myLabel
}
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
Si la condition 2 prend la valeur True, l’exécution du script passe à l’instruction après la boucle étiquetée. Dans l’exemple, l’exécution recommence avec l’instruction $a = $c
.
Vous pouvez imbriquer de nombreuses boucles étiquetées, comme illustré dans l’exemple suivant.
:red while (<condition1>) {
:yellow while (<condition2>) {
while (<condition3>) {
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
Write-Host "After innermost loop"
}
Write-Host "After yellow loop"
}
Write-Host "After red loop"
Si la variable prend la $b
valeur True, l’exécution du script reprend après la boucle étiquetée « red ». Si la variable prend la $c
valeur True, l’exécution du contrôle de script reprend après la boucle étiquetée « jaune ».
Si la variable prend la $a
valeur True, l’exécution reprend après la boucle la plus interne. Aucune étiquette n’est nécessaire.
PowerShell ne limite pas la durée dans laquelle les étiquettes peuvent reprendre l’exécution. L’étiquette peut même passer le contrôle au-delà des limites des appels de script et de fonction.
Utilisation de break dans une instruction switch
Dans une switch
construction, break
PowerShell quitte le bloc de switch
code.
Le break
mot clé est utilisé pour quitter la switch
construction. Par exemple, l’instruction suivante switch
utilise break
des instructions pour tester la condition la plus spécifique :
$var = "word2"
switch -regex ($var) {
"word2" {
Write-Host "Exact" $_
break
}
"word.*" {
Write-Host "Match on the prefix" $_
break
}
"w.*" {
Write-Host "Match on at least the first letter" $_
break
}
default {
Write-Host "No match" $_
break
}
}
Dans cet exemple, la $var
variable est créée et initialisée avec une valeur de chaîne de word2
. L’instruction switch
utilise la classe Regex pour faire correspondre d’abord la valeur de la variable au terme word2
. Étant donné que la valeur de la variable et le premier test de l’instruction switch
correspondent, le premier bloc de code de l’instruction s’exécute switch
.
Lorsque PowerShell atteint la première break
instruction, l’instruction switch
se ferme. Si les quatre break
instructions sont supprimées de l’exemple, les quatre conditions sont remplies. Cet exemple utilise l’instruction break
pour afficher les résultats lorsque la condition la plus spécifique est remplie.
Utilisation de break dans une instruction trap
Si l’instruction finale exécutée dans le corps d’une trap
instruction est break
, l’objet d’erreur est supprimé et l’exception est levée à nouveau.
L’exemple suivant crée une exception DivideByZeroException qui est piégée à l’aide de l’instruction trap
.
function test {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
$i = 3
'Before loop'
while ($true) {
"1 / $i = " + (1 / $i--)
}
'After loop'
}
test
Notez que l’exécution s’arrête à l’exception. Le After loop
n’est jamais atteint.
L’exception est levée à nouveau après l’exécution de trap
.
Before loop
1 / 3 = 0.333333333333333
1 / 2 = 0.5
1 / 1 = 1
divide by zero trapped
Attempted to divide by zero.
At line:10 char:6
+ "1 / $i = " + (1 / $i--)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RuntimeException
N’utilisez pas d’arrêt en dehors d’une boucle, d’un commutateur ou d’une interruption
Quand break
est utilisé en dehors d’une construction qui la prend directement en charge (boucles, switch
, trap
), PowerShell recherche une construction englobante dans la pile des appels . S’il ne trouve pas de construction englobante, l’espace d’exécution actuel se termine silencieusement.
Cela signifie que les fonctions et les scripts qui utilisent par inadvertance un break
en dehors d’une construction englobante qui la prend en charge peuvent arrêter par inadvertance leurs appelants.
L’utilisation break
à l’intérieur d’un pipeline break
, comme un ForEach-Object
bloc de script, quitte non seulement le pipeline, mais termine potentiellement l’intégralité de l’espace d’exécution.