Freigeben über


Über Break

KURZE BESCHREIBUNG

Beschreibt eine Anweisung, mit der Sie Foreach-, For-, While-, Do- oder Switch-Anweisungen sofort beenden können.

LANGE BESCHREIBUNG

Wenn eine Break-Anweisung in einer Schleife angezeigt wird, z. B. in einer Foreach-, For- oder While-Schleife, bewirkt die Break-Anweisung, dass PowerShell die Schleife sofort beendet. In einem Switch-Konstrukt bewirkt Break, dass PowerShell den Switch-Codeblock beendet.

Eine Break-Anweisung kann eine Beschriftung enthalten, mit der Sie eingebettete Schleifen beenden können. Eine Beschriftung kann ein beliebiges Schleifenschlüsselwort angeben, z. B. Foreach, For oder While, in einem Skript.

Das folgende Beispiel zeigt, wie eine Break-Anweisung verwendet wird, um eine For-Anweisung zu beenden:

for($i=1; $i -le 10; $i++) {
   Write-Host $i
   break
}

In diesem Beispiel beendet die Break-Anweisung die For-Schleife, wenn die Variable $i gleich 1 ist. Obwohl die For-Anweisung als True ausgewertet wird, bis $i größer als 10 ist, erreicht PowerShell die break-Anweisung, wenn die For-Schleife zum ersten Mal ausgeführt wird.

Es ist üblicher, die Break-Anweisung in einer Schleife zu verwenden, in der eine innere Bedingung erfüllt sein muss. Betrachten Sie das folgende Beispiel für eine foreach-Anweisung:

$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
  $i++
  if ($val -eq 30) {
    break
  }
}
Write-Host "30 was found in array position $i"

In diesem Beispiel durchläuft die Foreach-Anweisung das $varB Array. Jedes Mal, wenn der Codeblock ausgeführt wird, wird die Variable $i um 1 erhöht. Die If-Anweisung wird bei den ersten beiden Ausführungen, in denen die Schleife ausgeführt wird, als False ausgewertet. Beim dritten Ausführen der Schleife ist $i gleich 3 und die Variable $val gleich 30. An diesem Punkt wird die Break-Anweisung ausgeführt, und die Foreach-Schleife wird beendet.

Sie brechen aus den anderen Schleifenanweisungen auf die gleiche Weise aus wie aus der Foreach-Schleife. Im folgenden Beispiel beendet die Break-Anweisung eine While-Anweisung, wenn eine DivideByZeroException-Ausnahme mit der Trap-Anweisung abgefangen wird.

$i = 3
while ($true) {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }
   1 / $i--
}

Eine Break-Anweisung kann eine Beschriftung enthalten. Wenn Sie das Break-Schlüsselwort mit einer Bezeichnung verwenden, beendet PowerShell die bezeichnete Schleife, anstatt die aktuelle Schleife zu beenden. Die Syntax für eine Bezeichnung lautet wie folgt (in diesem Beispiel wird eine Beschriftung in einer While-Schleife gezeigt):

:myLabel while (<condition>) { <statement list>}

Die Bezeichnung ist ein Doppelpunkt gefolgt von einem Namen, den Sie zuweisen. Die Bezeichnung muss das erste Token in einer Anweisung sein, und es muss das Schlüsselwort looping folgen, z. B. While.

In PowerShell können nur Schleifenschlüsselwörter wie Foreach, For und While eine Bezeichnung aufweisen.

Break verschiebt die Ausführung aus der beschrifteten Schleife. In eingebetteten Schleifen führt dies zu einem anderen Ergebnis als das Break-Schlüsselwort, wenn es allein verwendet wird. Dieses schematische Beispiel enthält eine While-Anweisung mit einer For-Anweisung:

: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

Wenn Bedingung 2 als Wahr ausgewertet wird, springt die Ausführung des Skripts nach der bezeichneten Schleife zu der Anweisung. Im Beispiel beginnt die Ausführung wieder mit der Anweisung "$a = $c".

Sie können viele beschriftete Schleifen verschachteln, wie im folgenden schematischen Beispiel gezeigt.

: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"

Wenn die Variable $b als True ausgewertet wird, wird die Ausführung des Skripts nach der Schleife mit der Bezeichnung "rot" fortgesetzt. Wenn die Variable $c als True ausgewertet wird, wird die Ausführung des Skriptsteuerelements nach der Schleife mit der Bezeichnung "gelb" fortgesetzt.

Wenn die Variable $a als True ausgewertet wird, wird die Ausführung nach der innersten Schleife fortgesetzt. Es ist keine Bezeichnung erforderlich.

PowerShell beschränkt nicht, wie weit Bezeichnungen die Ausführung fortsetzen können. Die Bezeichnung kann sogar die Steuerung über Skript- und Funktionsaufrufgrenzen hinweg übergeben.

Das Break-Schlüsselwort wird verwendet, um das Switch-Konstrukt zu verlassen. Die folgende Switch-Anweisung verwendet z. B. Break-Anweisungen, um auf die spezifischste Bedingung zu testen:

$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
    }
}

In diesem Beispiel wird die Variable $var erstellt und mit dem Zeichenfolgenwert "word2" initialisiert. Die Switch-Anweisung verwendet die Regex-Klasse, um den Variablenwert zuerst mit dem Begriff "word2" abzugleichen. (Die Regex-Klasse ist eine Microsoft .NET Framework-Klasse mit regulären Ausdrücken.) Da der Variablenwert und der erste Test in der Switch-Anweisung übereinstimmen, wird der erste Codeblock in der Switch-Anweisung ausgeführt.

Wenn PowerShell die erste Break-Anweisung erreicht, wird die Switch-Anweisung beendet. Wenn die vier Break-Anweisungen aus dem Beispiel entfernt werden, sind alle vier Bedingungen erfüllt. In diesem Beispiel wird die break-Anweisung verwendet, um Ergebnisse anzuzeigen, wenn die spezifischste Bedingung erfüllt ist.

SIEHE AUCH

über_Vergleich_Operatoren

about_Continue

über_For

about_Foreach

about_Switch

about_Throw

über_Falle

über_Versuchen_Fangen_Finale

about_While