Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Breve descrizione
Viene descritta un'istruzione che è possibile utilizzare per uscire foreachimmediatamente dalle istruzioni , for, while, do, switch, o trap .
Descrizione lunga
L'istruzione break consente di uscire dal blocco di controllo corrente.
L'esecuzione prosegue con l'istruzione successiva dopo il blocco di controllo. La dichiarazione supporta le etichette. Un'etichetta è un nome assegnato a un'istruzione in uno script.
Uso di break in cicli
Quando un'istruzione break viene visualizzata in un ciclo, come un ciclo foreach, for, doo un ciclo while, PowerShell esce immediatamente dal ciclo.
Un'istruzione break può includere un'etichetta che consente di uscire dai cicli annidati. Un'etichetta può specificare qualsiasi parola chiave del ciclo, ad esempio foreach, foro while, in uno script.
Nell'esempio seguente viene illustrato come usare un'istruzione break per uscire da un'istruzione for:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
In questo esempio, l'istruzione break esce dal ciclo for quando la variabile $i è uguale a 1. Anche se l'istruzione for restituisce True fino a quando $i è maggiore di 10, PowerShell raggiunge l'istruzione break la prima volta che viene eseguito il ciclo for.
È più comune usare l'istruzione break in un ciclo in cui deve essere soddisfatta una condizione interna. Si consideri il seguente esempio di istruzione 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 questo esempio l'istruzione foreach esegue l'iterazione della matrice di $varB. L'istruzione if restituisce False le prime due volte in cui il ciclo viene eseguito e la variabile $i viene incrementata di 1. La terza volta che viene eseguito il ciclo, $i è uguale a 2, e la variabile $val è uguale a 30. A questo punto, viene eseguita l'istruzione break e il ciclo foreach viene chiuso.
Uso di un'etichetta break in un ciclo
Un'istruzione break può includere un'etichetta. Se si usa la parola chiave break con un'etichetta, PowerShell esce dal ciclo etichettato anziché uscire dal ciclo corrente.
L'etichetta è un due punti seguito da un nome che assegni. L'etichetta deve essere il primo token in un'istruzione e deve essere seguita da una parola chiave di loop, ad esempio while.
break sposta l'esecuzione all'esterno del ciclo etichettato. Nei cicli incorporati, questo ha un risultato diverso rispetto alla parola chiave break quando viene usato da solo. Questo esempio presenta un'istruzione while e un'istruzione for:
: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
Se la condizione 2 restituisce True, l'esecuzione dello script passa all'istruzione dopo il ciclo etichettato. Nell'esempio l'esecuzione viene avviata di nuovo con l'istruzione $a = $c.
È possibile annidare numerosi cicli etichettati, come mostrato nell'esempio seguente.
: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"
Se la variabile $b restituisce True, l'esecuzione dello script riprende dopo il ciclo con etichetta "rosso". Se la variabile $c valuta a True, l'esecuzione del controllo del script riprende dopo il ciclo etichettato come "giallo".
Se la variabile $a restituisce True, l'esecuzione riprende dopo il ciclo più interno. Non è necessaria alcuna etichetta.
PowerShell non limita la distanza con cui le etichette possono riprendere l'esecuzione. L'etichetta può anche passare il controllo attraverso i confini di script e chiamate di funzione.
Uso di break in un'istruzione switch
In un costrutto di switch, break fa uscire PowerShell dal blocco di codice switch.
La parola chiave break viene usata per uscire dal costrutto switch. Ad esempio, l'istruzione switch seguente usa istruzioni break per verificare la condizione più specifica:
$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 questo esempio, la variabile $var viene creata e inizializzata in un valore stringa di word2. L'istruzione switch usa la classe Regex per trovare prima la corrispondenza del valore della variabile con il termine word2. Poiché il valore della variabile e il primo test nell'istruzione switch corrispondono, viene eseguito il primo blocco di codice nell'istruzione switch.
Quando PowerShell raggiunge la prima istruzione break, l'istruzione switch viene chiusa. Se le quattro istruzioni break venissero rimosse dall'esempio, verrebbero soddisfatte tutte e quattro le condizioni. In questo esempio viene utilizzata l'istruzione break per visualizzare i risultati quando viene soddisfatta la condizione più specifica.
Uso di break in un'istruzione trap
Se l'istruzione finale eseguita nel corpo di un'istruzione trap è break, l'oggetto errore viene eliminato e l'eccezione viene generata nuovamente.
Nell'esempio seguente viene creata un'eccezione DivideByZeroException intercettata utilizzando l'istruzione trap .
function test {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
$i = 3
'Before loop'
while ($true) {
"1 / $i = " + (1 / $i--)
}
'After loop'
}
test
Si noti che l'esecuzione si arresta in corrispondenza dell'eccezione. Il After loop non viene mai raggiunto.
L'eccezione viene generata nuovamente dopo l'esecuzione del trap.
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.
Non usare break all'esterno di un ciclo, switcho trap
Quando break viene usato all'esterno di un costrutto che lo supporta direttamente (cicli, switch, trap), PowerShell cerca nello stack di chiamate per un costrutto contenitore. Se non riesce a trovare un costrutto circostante, lo spazio di esecuzione corrente viene terminato senza notifiche.
Ciò significa che funzioni e script che inavvertitamente usano un break al di fuori di un costrutto di inclusione che lo supporta possono terminare inavvertitamente i loro chiamanti .
L'uso di break all'interno di una pipeline break, come un blocco di script ForEach-Object, non solo permette di uscire dalla pipeline, ma può anche terminare l'intero spazio di esecuzione.