РАЗДЕЛ about_Break КРАТКОЕ ОПИСАНИЕ Описывает инструкции, которые можно использовать для немедленного завершения выполнения инструкций Foreach, For, While, Do и Switch. ПОЛНОЕ ОПИСАНИЕ Если инструкция Break присутствует в цикле, например в цикле Foreach, For, Switch или While, инструкция Break приводит к немедленному завершению обработки цикла оболочкой Windows PowerShell. В конструкции Switch, не являющейся циклом, инструкция Break приводит к немедленному завершению обработки блока кода Switch оболочкой Windows PowerShell. В инструкции Break может указываться метка, позволяющая выполнять выход из вложенных циклов. Метка может указывать на любое ключевое слово цикла, например Foreach, For или While, в скрипте. Если в инструкции Break используется метка, то она обеспечивает завершение обработки указанного цикла. Инструкция Break завершает обработку указанного цикла независимо от того, в каком цикле расположена сама инструкция Break. В следующем примере показано, как использовать инструкцию Break для выхода из инструкции For: for($i=1; $i -le 10; $i++) { Write-Host $i break } В этом случае инструкция Break обеспечивает выход из цикла For, если значение переменной $i равняется 1. Хотя значение инструкции For истинно, пока значение $i больше 10, оболочка Windows PowerShell выполняет инструкцию break при первом проходе по циклу For. Инструкция Break чаще используется внутри цикла при выполнении внутреннего условия. Рассмотрим следующий пример инструкции Foreach: $i=0 $varB = 10,20,30,40 foreach ($val in $varB) { $i++ if ($val -eq 30) { break } } Write-Host "Значение 30 было найдено в позиции массива $i" В этом примере инструкция Foreach обеспечивает последовательную обработку элементов массива $varB. При каждом выполнении блока кода значение переменной $i увеличивается на 1. Условие в инструкции If принимает значение False при первых двух проходах по циклу. При третьем проходе по циклу значение переменной $i равно 3, а переменной $val - 30, при этом выполняется инструкция Break с выходом из цикла Foreach. Выход из других циклических инструкций осуществляется аналогично выходу из цикла Foreach. В следующем примере инструкция Break обеспечивает выход из инструкции While при перехвате исключения DivideByZeroException с использованием инструкции Trap. $i = 3 while ($true) { trap [DivideByZeroException] { Write-Host "перехвачено исключение при делении на ноль" break } 1 / $i-- } В инструкции Break может содержаться метка. При использовании ключевого слова Break с меткой Windows PowerShell обеспечивает выход из цикла, которому соответствует метка, а не из текущего цикла. Для описания метки используется следующий синтаксис (в этом примере показана метка для цикла While): :моя_метка while (<условие>) { <список_инструкций>} Метка представляет собой двоеточие за которым следует имя, определяемое пользователем. Метка должна быть первым токеном в инструкции, за меткой должно следовать ключевое слово инструкции цикла, например While. В оболочке Windows PowerShell метки могут указываться только для ключевых слов циклов, например Foreach, For и While. Инструкция Break обеспечивает прекращение обработки цикла с меткой. Во вложенных циклах использование такой инструкции отличается от использования ключевого слова Break без метки. В этом схематическом примере представлена инструкция While с вложенным циклом For. :myLabel while (<условие_1>) { for ($item in $items) { if (<условие_2>) { break myLabel } $item = $x # Инструкция в цикле For } } $a = $c # Инструкция после цикла While с меткой Если условие 2 принимает значение True, в скрипте выполняется переход на инструкцию после цикла с меткой. В этом примере обработка продолжается с инструкции "$a = $c". Допускается использование нескольких вложенных циклов с метками, как показано в следующем примере: :red while (<условие_1>) { :yellow while (<условие_2>) { while (<условие_3>) { if ($a) {break} if ($b) {break red} if ($c) {break yellow} } # После самого вложенного цикла } # После цикла с меткой "yellow" } # После цикла с меткой "red" Если переменная $b принимает значение True, в скрипте выполняется переход на инструкцию после цикла с меткой "red". Если переменная $c принимает значение True, в скрипте выполняется переход на инструкцию после цикла с меткой "yellow". Если переменная $a принимает значение True, в скрипте выполняется переход на инструкцию, следующую за самым вложенным циклом. Метка не требуется. Оболочка Windows PowerShell не ограничивает расстояние между меткой и инструкцией, которая будет обрабатываться при выходе из цикла. Метка может использоваться для передачи управления через границы вызова скрипта или функции. Ключевое слово Break используется для выхода из конструкции Switch. Например, инструкция Break используется в следующей инструкции Switch для поиска совпадения с наиболее конкретным условием: $var = "ассемблер" switch -regex ($var) { "ассемблер" { Write-Host "Точное совпадение" $_ break } "асс.*" { Write-Host "Соответствие по префиксу" $_ break } "а.*" { Write-Host "Соответствие по крайней мере по первому символу" $_ break } default { Write-Host "Не совпадает" $_ break } } В этом примере создается переменная $var, которая инициализируется строковым значением "ассемблер". В инструкции Switch используется класс Regex, позволяющий сопоставить значение переменной с термином "ассемблер". (Класс Regex является классом для обработки регулярных выражений платформы Microsoft .NET Framework.) Поскольку значение переменной и результат первой проверки в инструкции Switch совпадают, выполняется первый блок кода в инструкции Switch. Когда оболочка Windows PowerShell достигает первой инструкции Break, выполнение инструкции Switch завершается. Если удалить из данного примера четыре инструкции Break, то были бы выполнены все четыре условия. В этом примере инструкция break используется в примере для отображения результатов при выполнении наиболее конкретного условия. СМ. ТАКЖЕ about_Comparison_Operators about_For about_Foreach about_Switch about_While