Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
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 verlassen.
Die Ausführung wird bei der nächsten Anweisung nach dem Steuerelementblock fortgesetzt. Die Anweisung unterstützt Kennzeichnungen. 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. eine 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 ein beliebiges Schleifenstichwort angeben, z. B. foreach, foroder whilein 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 break-Anweisung die for Schleife, wenn die $i Variable gleich 1 ist. Obwohl die for-Anweisung True ausgewertet wird, bis $i größer als 10 ist, erreicht PowerShell die Unterbrechungsanweisung, wenn die for Schleife zum ersten Mal ausgeführt wird.
Es ist häufiger, die break-Anweisung in einer Schleife zu verwenden, in der eine innere Bedingung erfüllt werden muss. Betrachten Sie das folgende foreach-Anweisungsbeispiel:
$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 wird bei der ersten ausführung der Schleife zu False ausgewertet, und die Variable $i wird um 1 erhöht. Das dritte Mal, wenn die Schleife ausgeführt wird, $i gleich 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 break in einer Schleife
Eine break-Anweisung kann eine Bezeichnung enthalten. Wenn Sie das schlüsselwort break 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 mit dem Schlüsselwort der Schleife, z. B. while, gefolgt werden.
break die Ausführung aus der beschrifteten Schleife verschiebt. In eingebetteten Schleifen hat dies ein anderes Ergebnis als das schlüsselwort break hat, wenn es 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 als Trueausgewertet wird, springt die Ausführung des Skripts nach der beschrifteten Schleife bis 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 "True" auswertet, wird die Ausführung des Skripts nach der Schleife fortgesetzt, die als "rot" bezeichnet wird. Wenn die $c Variable "True" auswertet, wird die Ausführung des Skriptsteuerelements nach der Schleife fortgesetzt, die als "gelb" bezeichnet wird.
Wenn die $a Variable "True" auswertet, 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.
Verwenden von break in einer switch-Anweisung
In einem switch-Konstrukt bewirkt break, dass PowerShell den switch Codeblock verlässt.
Das schlüsselwort break wird verwendet, um das switch-Konstrukt zu verlassen. Die folgende switch-Anweisung verwendet z. B. break Anweisungen, um 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 word2initialisiert. 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 von break in einer trap-Anweisung
Wenn die endgültige Anweisung, die im Textkörper einer trap-Anweisung ausgeführt wird, breakist, 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 erneut ausgelöst, nachdem die trap ausgeführt wurde.
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 Sie nicht break außerhalb einer Schleife, switchoder trap
Wenn break außerhalb eines Konstrukts verwendet wird, das es direkt unterstützt (Schleifen, switch, trap), sucht PowerShell auf dem Call-Stack nach einem einschließenden Konstrukt. Wenn es kein umschließendes Konstrukt findet, wird der aktuelle Runspace stillschweigend beendet.
Dies bedeutet, dass Funktionen und Skripts, die versehentlich eine break außerhalb eines eingeschlossenen Konstrukts verwenden, das es unterstützt, versehentlich ihre Aufruferbeenden können.
Wenn Sie break in einer Pipeline breakverwenden, z. B. einen ForEach-Object Skriptblock, beendet sie nicht nur die Pipeline, sie beendet möglicherweise den gesamten Runspace.