Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Brève description
Décrit l’instruction break, qui permet de quitter le bloc de contrôle actuel.
Description longue
L’instruction break permet 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 supporte les labels. Un label est un nom que vous assignez à une instruction dans un script.
Utilisation de break dans des boucles
Lorsqu’une instruction break apparaît dans une boucle, telle qu’une foreach, for, doou while boucle, PowerShell quitte immédiatement la boucle.
Une instruction break peut inclure une étiquette qui vous permet de quitter des boucles incorporées. Une étiquette peut spécifier n’importe quel mot clé de boucle, tel que foreach, forou while, dans un script.
L’exemple suivant montre comment utiliser une instruction break pour quitter une instruction for :
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
Dans cet exemple, l’instruction break quitte la boucle for lorsque la variable $i est égale à 1. Même si l’instruction for prend la valeur True jusqu’à ce que $i soit supérieure à 10, PowerShell atteint l’instruction break la première fois que la boucle for 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 foreach suivant :
$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 tableau $varB. L’instruction if prend la valeur False les deux premières fois que la boucle est exécutée et que 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 variable $val est égale à 30. À ce stade, l’instruction break s’exécute et la boucle foreach se termine.
Utilisation d’un break étiqueté dans une boucle
Une instruction break peut inclure une étiquette. Si vous utilisez le mot clé break 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 du mot clé de boucle, tel que while.
break déplace l’exécution hors de la boucle étiquetée. Dans les boucles incorporées, cela a un résultat différent du mot clé break lorsqu’il est utilisé par lui-même. Cet exemple contient une instruction while avec une instruction for :
: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 démarre à nouveau 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 $b a la valeur True, l’exécution du script reprend après la boucle intitulée « rouge ». Si la variable $c a la valeur True, l’exécution du contrôle de script reprend après la boucle intitulée « jaune ».
Si la variable $a a la valeur True, l’exécution reprend après la boucle la plus interne. Aucune étiquette n’est nécessaire.
PowerShell ne limite pas la distance à laquelle les étiquettes peuvent reprendre l’exécution. L’étiquette peut même passer le contrôle entre les limites des appels de script et de fonction.
Utilisation de break dans une instruction switch
Dans une construction switch, break entraîne la sortie de PowerShell dans le bloc de code switch.
Le mot clé break est utilisé pour laisser la construction switch. Par exemple, l’instruction switch suivante utilise des instructions break 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 variable $var est créée et initialisée dans une valeur de chaîne de word2. L’instruction switch correspondent, le premier bloc de code de l’instruction switch s’exécute.
Lorsque PowerShell atteint la première instruction break, l’instruction switch se ferme. Si les quatre instructions break 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 instruction trap 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 intercepté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 du trap.
Before loop
1 / 3 = 0.333333333333333
1 / 2 = 0.5
1 / 1 = 1
divide by zero trapped
ParentContainsErrorRecordException:
Line |
10 | "1 / $i = " + (1 / $i--)
| ~~~~~~~~~~~~~~~~~~~~~~~~
| Attempted to divide by zero.
N’utilisez pas break en dehors d’une boucle, switchou trap
Lorsque break est utilisé en dehors d’une structure qui le supporte directement (boucles, switch, trap), PowerShell recherche dans la pile d’appels une structure englobante. S’il ne trouve aucune structure englobante, l’espace d’exécution actuel est silencieusement terminé.
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 mettre fin par inadvertance à leurs appelants .
L’utilisation de break à l’intérieur d’un pipeline break, comme un bloc de script ForEach-Object, ne quitte pas seulement le pipeline, il met potentiellement fin à l’intégralité de l’espace d’exécution.