Om break

KORT BESKRIVNING

Beskriver en instruktion som du kan använda för att omedelbart avsluta Foreach-, For-, While-, Do- eller Switch-instruktioner.

LÅNG BESKRIVNING

När en Break-instruktion visas i en loop, till exempel en Foreach-, For- eller While-loop, gör Break-instruktionen att PowerShell omedelbart avslutar loopen. I en Switch-konstruktion gör Break att PowerShell avslutar växlingskodblocket.

En Break-instruktion kan innehålla en etikett som gör att du kan avsluta inbäddade loopar. En etikett kan ange valfritt loopnyckelord, till exempel Foreach, For eller While, i ett skript.

I följande exempel visas hur du använder en Break-instruktion för att avsluta en For-instruktion:

for($i=1; $i -le 10; $i++) {
   Write-Host $i
   break
}

I det här exemplet avslutar break-instruktionen For-loopen när variabeln $i är lika med 1. Även om For-instruktionen utvärderas till True tills $i är större än 10, når PowerShell break-instruktionen första gången For-loopen körs.

Det är vanligare att använda break-instruktionen i en loop där ett inre villkor måste uppfyllas. Överväg följande Foreach-instruktionsexempel:

$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
  $i++
  if ($val -eq 30) {
    break
  }
}
Write-Host "30 was found in array position $i"

I det här exemplet itererar Foreach-instruktionen $varB-matrisen. Varje gång kodblocket körs ökas variabeln $i med 1. If-instruktionen utvärderas till False de två första gångerna loopen körs. Tredje gången loopen körs är $i lika med 3 och variabeln $val är lika med 30. Nu körs Break-instruktionen och Foreach-loopen avslutas.

Du bryter ut från de andra loopningsinstruktionerna på samma sätt som du bryter ut från Foreach-loopen. I följande exempel avslutar Break-instruktionen en While-instruktion när ett DivideByZeroException-undantag fångas med trap-instruktionen.

$i = 3
while ($true) {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }
   1 / $i--
}

En Break-instruktion kan innehålla en etikett. Om du använder nyckelordet Bryt med en etikett avslutar PowerShell den märkta loopen i stället för att avsluta den aktuella loopen. Syntaxen för en etikett är följande (det här exemplet visar en etikett i en While-loop):

:myLabel while (<condition>) { <statement list>}

Etiketten är ett kolon följt av ett namn som du tilldelar. Etiketten måste vara den första token i en -instruktion, och den måste följas av nyckelordet loopning, till exempel While.

I PowerShell kan endast loopnyckelord, till exempel Foreach, For och While, ha en etikett.

Break flyttar körningen från den märkta loopen. I inbäddade loopar har detta ett annat resultat än vad nyckelordet Break har när det används av sig självt. Det här schematiska exemplet har en While-instruktion med en For-instruktion:

: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

Om villkor 2 utvärderas till Sant hoppar körningen av skriptet ned till -instruktionen efter den märkta loopen. I exemplet startar körningen igen med instruktionen "$a = $c".

Du kan kapsla många etiketterade loopar, som du ser i följande schemaexempel.

: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"

Om variabeln $b utvärderas till Sant återupptas körningen av skriptet efter loopen som är märkt "röd". Om variabeln $c utvärderas till Sant återupptas körningen av skriptkontrollen efter loopen som är märkt "gul".

Om variabeln $a utvärderas till Sant återupptas körningen efter den innersta loopen. Ingen etikett behövs.

PowerShell begränsar inte hur långt etiketter kan återuppta körningen. Etiketten kan till och med skicka kontroll över skript- och funktionsanropsgränser.

Nyckelordet Bryt används för att lämna switch-konstruktionen. Följande Switch-instruktion använder till exempel Break-instruktioner för att testa för det mest specifika villkoret:

$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
    }
}

I det här exemplet skapas och initieras variabeln $var till strängvärdet "word2". Switch-instruktionen använder klassen Regex för att matcha variabelvärdet först med termen "word2". (Klassen Regex är ett reguljärt uttryck för Microsoft .NET Framework-klass.) Eftersom variabelvärdet och det första testet i Switch-instruktionen matchar körs det första kodblocket i Switch-instruktionen.

När PowerShell når den första Break-instruktionen avslutas Switch-instruktionen. Om de fyra Break-uttrycken tas bort från exemplet uppfylls alla fyra villkoren. I det här exemplet används break-instruktionen för att visa resultat när det mest specifika villkoret uppfylls.

SE ÄVEN

about_Comparison_Operators

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While