about_Break

Kurze Beschreibung

Beschreibt die break Anweisung, die eine Möglichkeit zum Beenden des aktuellen Steuerelementblocks bietet.

Lange Beschreibung

Die break Anweisung bietet eine Möglichkeit, den aktuellen Kontrollblock zu beenden. Die Ausführung wird bei der nächsten Anweisung nach dem Steuerelementblock fortgesetzt. Die Anweisung unterstützt Bezeichnungen. Eine Bezeichnung ist ein Name, den Sie einer Anweisung in einem Skript zuweisen.

Verwenden break in Schleifen

Wenn eine break Anweisung in einer Schleife angezeigt wird, z. B. ein foreach, for, dooder eine while Schleife, beendet PowerShell die Schleife sofort.

Eine break Anweisung kann eine Beschriftung enthalten, mit der Sie eingebettete Schleifen beenden können. Eine Bezeichnung kann eine beliebige Schleife Schlüsselwort (keyword) angeben, zforeach. B. , for, oder while, in einem Skript.

Das folgende Beispiel zeigt, wie Sie eine break Anweisung verwenden, um eine for Anweisung zu beenden:

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

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

Es ist häufiger, die Anweisung in einer Schleife zu verwenden, in der break eine innere Bedingung erfüllt werden muss. Betrachten Sie das folgende Anweisungsbeispiel 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"

In diesem Beispiel durchläuft die foreach Anweisung das $varB Array. Die if Anweisung wertet bei der ersten ausführung der Schleife auf False aus, und die Variable $i wird um 1 erhöht. Das dritte Mal, wenn die Schleife ausgeführt wird, $i entspricht 2, und die $val Variable entspricht 30. An diesem Punkt wird die break Anweisung ausgeführt, und die foreach Schleife wird beendet.

Verwenden einer beschrifteten Beschriftung break in einer Schleife

Eine break Anweisung kann eine Bezeichnung enthalten. Wenn Sie die break Schlüsselwort (keyword) mit einer Bezeichnung verwenden, beendet PowerShell die beschriftete Schleife, anstatt die aktuelle Schleife zu beenden. 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 der Schleifen-Schlüsselwort (keyword) folgen, zwhile. B. . .

break verschiebt die Ausführung aus der beschrifteten Schleife. In eingebetteten Schleifen hat dies ein anderes Ergebnis als die break Schlüsselwort (keyword), wenn sie von sich selbst verwendet wird. Dieses Beispiel weist eine while Anweisung mit einer for Anweisung auf:

: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 " True" auswertet, springt die Ausführung des Skripts nach der beschrifteten Schleife nach unten zur Anweisung. Im Beispiel beginnt die Ausführung erneut mit der Anweisung $a = $c.

Sie können viele beschriftete Schleifen verschachteln, wie im folgenden 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 $b Variable auf "True" ausgewertet wird, wird die Ausführung des Skripts nach der Schleife fortgesetzt, die als "rot" bezeichnet wird. Wenn die $c Variable auf "True" ausgewertet wird, wird die Ausführung des Skriptsteuerelements nach der Schleife fortgesetzt, die mit der Bezeichnung "gelb" gekennzeichnet ist.

Wenn die Variable "True" auswertet, wird die $a 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.

Verwenden break in einer switch Anweisung

Führt in einem switchKonstrukt dazu, break dass PowerShell den switch Codeblock verlässt.

Die break Schlüsselwort (keyword) wird verwendet, um das switch Konstrukt zu verlassen. Die folgende switch Anweisung verwendet break beispielsweise 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 $var Variable erstellt und in einen Zeichenfolgenwert von word2. Die switch Anweisung verwendet die Regex-Klasse , um den Variablenwert zuerst mit dem Ausdruck word2abzugleichen. Da der Variablewert 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, werden alle vier Bedingungen erfüllt. In diesem Beispiel wird die break Anweisung verwendet, um Ergebnisse anzuzeigen, wenn die spezifischste Bedingung erfüllt ist.

Verwenden break in einer trap Anweisung

Wenn die endgültige Anweisung im Textkörper einer trap Anweisung ausgeführt wird break, wird das Fehlerobjekt unterdrückt, und die Ausnahme wird erneut ausgelöst.

Im folgenden Beispiel wird eine DivideByZeroException-Ausnahme erstellt, die mithilfe der trap Anweisung abgefangen wird.

function test {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }

  $i = 3
  'Before loop'
  while ($true) {
     "1 / $i = " + (1 / $i--)
  }
  'After loop'
}
test

Beachten Sie, dass die Ausführung bei der Ausnahme beendet wird. Dies After loop ist nie erreicht. Die Ausnahme wird nach der trap Ausführung erneut ausgelöst.

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.

Verwenden break Sie nicht außerhalb einer Schleife, switchoder trap

Wenn break außerhalb eines Konstrukts verwendet wird, das es direkt unterstützt (Schleifen, switch, ), trapsucht PowerShell den Aufrufstapel für ein eingeschlossenes Konstrukt. Wenn ein eingeschlossenes Konstrukt nicht gefunden werden kann, wird der aktuelle Runspace ruhig beendet.

Dies bedeutet, dass Funktionen und Skripts, die versehentlich eine break außerhalb eines eingeschlossenen Konstrukts verwenden, das es unterstützt, ihre Aufrufer versehentlich beenden können.

Die Verwendung break in einer Pipeline break, z. B. ein ForEach-Object Skriptblock, beendet nicht nur die Pipeline, er beendet möglicherweise den gesamten Runspace.

Weitere Informationen