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
, do
oder 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 break
for
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 switch
Konstrukt 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 word2
abzugleichen. 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, switch
oder trap
Wenn break
außerhalb eines Konstrukts verwendet wird, das es direkt unterstützt (Schleifen, switch
, ), trap
sucht 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.