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
, do
oder 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. , for
oder 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 switch
Konstrukt, 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 word2
initialisiert. 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, switch
oder 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.