about_Break
Kurze Beschreibung
Beschreibt eine Anweisung, die Sie zum sofortigen Beendenforeach
for
do
while
switch
, oder trap
Anweisungen verwenden können.
Lange Beschreibung
Die break
Anweisung bietet eine Möglichkeit, den aktuellen Steuerelementblock zu beenden.
Die Ausführung wird nach dem Steuerelementblock bei der nächsten Anweisung fortgesetzt. Die Anweisung unterstützt Bezeichnungen. Eine Bezeichnung ist ein Name, den Sie einer Anweisung in einem Skript zuweisen.
Verwenden in break
Schleifen
Wenn eine break
Anweisung in einer Schleife angezeigt wird, z. B. ein foreach
, while
for
do
oder eine Schleife, beendet PowerShell sofort die Schleife.
Eine break
Anweisung kann eine Bezeichnung enthalten, mit der Sie eingebettete Schleifen beenden können. Eine Bezeichnung kann ein beliebiges Schleifenwort angeben, z foreach
. B. , for
oder while
in einem Skript.
Im folgenden Beispiel wird gezeigt, wie Sie eine Anweisung verwenden, um eine break
for
Anweisung zu beenden:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
In diesem Beispiel beendet die Anweisung die for
Schleife, wenn die break
$i
Variable gleich 1 ist. Obwohl die for
Anweisung auf True ausgewertet wird, bis $i
es 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 break
Anweisung in einer Schleife zu verwenden, in der eine innere Bedingung erfüllt sein 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 wird die Anweisung das foreach
$varB
Array durchläuft. Die if
Anweisung wird mit "False" ausgewertet, während die Schleife ausgeführt wird und die Variable $i
um 1 erhöht wird. Das dritte Mal, wenn die Schleife ausgeführt wird, $i
gleich 2, und die $val
Variable entspricht 30. An diesem Punkt wird die Anweisung ausgeführt, und die break
foreach
Schleife wird beendet.
Verwenden einer Beschriftung break
in einer Schleife
Eine break
Anweisung kann eine Bezeichnung enthalten. Wenn Sie das break
Schlüsselwort 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 dem Looping-Schlüsselwort folgen, z while
. B. .
break
Verschiebt die Ausführung aus der beschrifteten Schleife. In eingebetteten Schleifen hat dies ein anderes Ergebnis als das break
Schlüsselwort, wenn er selbst verwendet wird. In diesem Beispiel wird eine while
Anweisung mit einer for
Anweisung ausgeführt:
: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 die Bedingung 2 auf True ausgewertet wird, wird die Ausführung des Skripts nach der beschrifteten Schleife nach der Beschriftungsschleife nach unten übersprungen. In dem Beispiel beginnt die Ausführung erneut mit der Anweisung $a = $c
.
Sie können viele beschriftete Schleifen verschachteln, wie im folgenden Beispiel dargestellt.
: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 Variable auf "True" ausgewertet wird, wird die $b
Ausführung des Skripts nach der Schleife fortgesetzt, die als "rot" bezeichnet wird. Wenn die Variable auf "True" ausgewertet wird, wird die $c
Ausführung des Skriptsteuerelements nach der Schleife fortgesetzt, die als "gelb" bezeichnet wird.
Wenn die Variable auf True ausgewertet wird, wird die $a
Ausführung nach der innersten Schleife fortgesetzt. Es ist keine Bezeichnung erforderlich.
PowerShell beschränkt nicht, wie weit Beschriftungen die Ausführung fortsetzen können. Die Bezeichnung kann sogar Kontrolle über Skript- und Funktionsaufrufgrenzen übergeben.
Verwenden break
in einer switch
Anweisung
In einem switch
Konstrukt break
führt PowerShell zum Beenden des switch
Codeblocks.
Das break
Schlüsselwort wird verwendet, um das switch
Konstrukt zu verlassen. Die folgende switch
Anweisung verwendet break
beispielsweise Anweisungen zum Testen für die spezifischste Bedingung:
$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 auf einen Zeichenfolgenwert von word2
. Die switch
Anweisung verwendet die Regex-Klasse , um den Variablenwert zuerst mit dem Ausdruck word2
übereinzugleichen. Da der Variablenwert und der erste Test in der Anweisung übereinstimmen, wird der erste Codeblock in der switch
switch
Anweisung ausgeführt.
Wenn PowerShell die erste break
Anweisung erreicht, wird die switch
Anweisung beendet. Wenn die vier Anweisungen aus dem Beispiel entfernt werden, werden alle vier break
Bedingungen erfüllt. In diesem Beispiel wird die Anweisung verwendet, um Ergebnisse anzuzeigen, wenn die break
spezifischste Bedingung erfüllt ist.
Verwenden break
in einer trap
Anweisung
Wenn die endgültige Anweisung im Textkörper einer trap
Anweisung break
ausgeführt wird, 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 aufgehalten 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 den trap
Ausführungen 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 sie direkt unterstützt (Schleifen, switch
, trap
), sucht PowerShell den Anrufstapel für ein eingeschlossenes Konstrukt. Wenn es kein eingeschlossenes Konstrukt finden kann, wird der aktuelle Runspace ruhig beendet.
Dies bedeutet, dass Funktionen und Skripts, die versehentlich eine break
außerhalb eines eingeschlossenen Konstrukts verwenden, die es unterstützt, ihre Anrufer versehentlich beenden können.
Wenn Sie break
in einer Pipeline , z. B. einem ForEach-Object
Skriptblock, nicht nur die Pipeline break
beenden, wird möglicherweise der gesamte Runspace beendet.