Freigeben über


about_Break

Kurze Beschreibung

Beschreibt die break -Anweisung, die eine Möglichkeit zum Beenden des aktuellen Kontrollblocks 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 Kontrollblock fortgesetzt. Die -Anweisung unterstützt Bezeichnungen. Eine Bezeichnung ist ein Name, den Sie einer Anweisung in einem Skript zuweisen.

Verwenden von break in Schleifen

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

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

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 break Anweisung die for Schleife, wenn die $i Variable 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. Sehen Sie sich das folgende foreach Beispiel für eine Anweisung an:

$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 ergibt false, wenn die Schleife zum ersten Mal ausgeführt wird, 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 ist gleich 30. An diesem Punkt wird die break -Anweisung ausgeführt, und die foreach Schleife wird beendet.

Verwenden einer in einer Schleife bezeichneten break

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 auf sie muss die schleifende 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 selbst verwendet wird. Dieses 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 True ausgewertet wird, wird die Ausführung des Skripts nach der beschrifteten Schleife bis zur -Anweisung übersprungen. 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 als True ausgewertet wird, wird die Ausführung des Skripts nach der Schleife mit der Bezeichnung "rot" fortgesetzt. Wenn die $c Variable als True ausgewertet wird, wird die Ausführung des Skriptsteuerelements nach der Schleife mit der Bezeichnung "gelb" fortgesetzt.

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

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

Verwenden in break einer switch -Anweisung

Bewirkt in einem switchKonstrukt, break dass PowerShell den switch Codeblock beendet.

Die break Schlüsselwort (keyword) wird verwendet, um das switch Konstrukt zu verlassen. Die folgende switch Anweisung verwendet break z. B. 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 mit dem Zeichenfolgenwert word2initialisiert. Die switch -Anweisung verwendet die Regex-Klasse , um den Variablenwert zuerst mit dem Begriff abzugleichen word2. 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.

Verwenden in break einer trap -Anweisung

Wenn die abschließende Anweisung, die im Text einer trap Anweisung ausgeführt wird, lautet 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. Die After loop wird nie erreicht. Die Ausnahme wird nach der Ausführung erneut trap 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, trap), sucht PowerShell die Aufrufliste für ein einschließendes Konstrukt. Wenn ein einschließendes Konstrukt nicht gefunden werden kann, wird der aktuelle Runspace still beendet.

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

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

Weitere Informationen