Partager via


À propos de Break

Description courte

Décrit une instruction que vous pouvez utiliser pour quitter foreachimmédiatement les instructions , whilefor, do, , switchou 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 foreachboucle , for, doou 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, forou 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 whileexemple .

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 switchconstruction, 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.

Voir aussi

about_Comparison_Operators

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While