PowerShell – это мощный скриптовый язык, который предоставляет множество функций для автоматизации и управления системами на базе Windows. Одной из наиболее часто используемых конструкций является цикл while
в PowerShell.
Не беспокойтесь, если вы застряли в бесконечном цикле, пытаясь изучить скриптовый язык PowerShell. Позвольте циклу while
в PowerShell помочь вам выбраться из него. В этом руководстве вы вернетесь к основам работы с циклами while
в PowerShell при написании ваших сценариев.
Читайте далее, чтобы развить свои навыки написания сценариев на PowerShell!
Требования
Это руководство будет демонстрацией на практике. Чтобы идти в ногу со временем, убедитесь, что у вас есть следующее:
- A Windows machine – This tutorial uses Windows 10.
- Установлен Windows PowerShell версии 5.0 или выше – в этом руководстве используется PowerShell 7.
- A user account with administrator privileges.
Выполнение одноусловных циклов while
Один из самых простых типов циклов while
– это одноусловный тип. В отличие от оператора If
, этот тип цикла выполняет заданный набор команд до тех пор, пока указанное условие оценивается как true. Когда возвращается значение “False”, цикл прерывается, и выполнение продолжается с остальной частью скрипта.
Ниже приведен синтаксис для одиночного цикла while
:
- Первое, что вы заметите, – это использование круглых скобок. Условие должно быть заключено в круглые скобки, в то время как блок кода представляет собой набор команд PowerShell, которые выполняются, пока условие истинно.
- Второе, что следует отметить, – условие должно возвращать логическое значение, которое оценивается как True или False.
Запустите код ниже, где значение $val
начинается с 0
и увеличивается на 1
при каждом выполнении блока кода до тех пор, пока значение переменной $val
не станет равным 3
.
Когда $val
достигает значения 3
, что делает условие ложным, цикл прерывается, и выполнение продолжается с остальной частью сценария.

Выполнение цикла While в PowerShell с использованием встроенных переменных ($true
/$false
)
Предыдущий пример с использованием условий в цикле while
работает хорошо. Но вы также можете использовать встроенные переменные PowerShell, такие как $true
и $false
, чтобы создать цикл While
.
Нижеприведенный синтаксис выполняется до тех пор, пока $true
больше не является $true
. Другими словами, цикл работает бесконечно. Но всегда следует предусмотреть способ выхода из бесконечного цикла. В противном случае вы навсегда застрянете. Больше вы узнаете о том, как выйти из цикла, используя break
и continue
, позже в этом руководстве.
Выполните ниже приведенный блок кода, который выполняется бесконечно, печатая значение $i
в консоль.
Теперь нажмите Ctrl+C, чтобы выйти из цикла. Этот цикл потребляет много системных ресурсов, поэтому будьте осторожны при их использовании.

while
loop with PowerShell’s built-in ($true
) variableВыполнение многокондиционных циклов While
Кроме однократных условных циклов while
, вы также можете создавать многократные условные циклы while
. Как и в случае с однократным условным циклом While
, условия должны возвращать логическое значение, либо True, либо False.
Ниже приведен синтаксис для многократного условного цикла while
, аналогичный синтаксису для однократного условного цикла while
. Основное отличие заключается в том, что вы можете включать несколько условий, разделенных следующими операторами:
- И (
-и
) – Оба условия должны быть истинными. - ИЛИ (
-или
) (Любое из условий может быть истинным).
Выполните код ниже, который выполняет цикл while
, пока $val
не равен (-ne
) 3
-и
$i
не равно (-ne
) 5
.
Когда оба значения переменных достигнут своих соответствующих условий, цикл прерывается, и выполнение продолжается с остальной частью скрипта.

Выполнение цикла while
с оператором AND

while
loop with AND operatorТеперь выполните приведенный ниже код, который запрашивает у пользователя его возраст, сохраненный в переменной $age
.
Если пользователь вводит число, меньшее (-lt
) 1
, или не является числом (-nomatch
), пользователю снова предлагается ввести допустимое число. Это поведение полезно, чтобы предоставить пользователям несколько шансов ввести допустимый ввод.
В выводе ниже вы можете видеть, что пользователю было предложено ввести свой возраст три раза, следующим образом:
- Первый раз пользователь ввел десять, что не является числом.
- Во второй раз пользователь ввел 0, что меньше 1.
- В третий раз пользователь ввел 10, что является допустимым возрастом.

while
loop with the OR operatorИспользование ключевых слов BREAK и CONTINUE в циклах While
Вы видели, как циклы while
добавляют гибкость к вашему сценарию PowerShell. Но для лучшего контроля за выполнением ваших циклов While добавьте ключевые слова break
и continue
.
Например, если вы хотите обработать только определенное количество элементов в массиве, вы можете использовать ключевое слово BREAK, чтобы выйти из цикла, когда требуемое количество элементов будет обработано.
Эти ключевые слова работают следующим образом:
Keyword | Function |
---|---|
break | Immediately exits the loop and continues execution with the rest of the script. |
continue | Skips over the remaining code block in the current iteration of the loop and continues with the next iteration. |
Выполните приведенный ниже код, который выполняет цикл по массиву из 10 элементов.
В приведенном ниже коде оператор if
проверяет значение $i
. Если значение $i
равно 5
, ключевое слово continue
пропускает оставшийся код в цикле и продолжает следующую итерацию. Если значение $i
равно 8
, ключевое слово break
завершает цикл и продолжает выполнение остальной части сценария.
В противном случае цикл while
выводит (Write-Host
) и увеличивает значение переменной $i
на 1
.
Как видно из вывода ниже, цикл пропустил пятый и восьмой элементы массива. Цикл while
обработал все остальные элементы массива и завершился после достижения восьмого элемента.

while
loop with break
and continue
keywordsОграничение Времени Выполнения Цикла While
Обычно вы можете захотеть ограничить время выполнения цикла. Возможно, вы пытаетесь подключиться к удаленному серверу. Если это так, вы можете дать серверу время для ответа перед завершением цикла с помощью командлета Start-Sleep
внутри вашего цикла while
.
Команда Start-Sleep
приостанавливает выполнение сценария на указанное время.
Выполните приведенный ниже код, чтобы получить и сохранить текущую дату и время Get-Date
в переменной $startTime
. Цикл while
выполняется, пока текущая дата/время меньше, чем 10
секунд от значения, сохраненного в переменной $startTime
.
Пока выполняется цикл while
, выводится сообщение, а команда Start-Sleep
приостанавливает выполнение сценария на 1
секунду.
Приведенный ниже блок кода представляет собой только шаблон того, что вы бы использовали на практике. Вы можете добавить больше кода внутри цикла по мере необходимости.
Ниже вы можете видеть, что цикл продолжал работать в течение 10 секунд, прежде чем выйти из цикла.

while
loop runsВывод
Циклы while
в PowerShell пригождаются при работе с комплексными концепциями, чтобы избежать застревания в цикле или при написании ваших сценариев. И в этом уроке вы узнали множество способов работы с циклами while
для более гибких и мощных сценариев.
С этим новым знанием небо – это предел. Так почему бы не максимизировать использование логических операторов и ключевых слов для автоматизации задач с помощью ваших сценариев?