Когда вы используете сценарии PowerShell для управления системами или выполнения массовых задач, вы неизбежно столкнетесь с необходимостью использования циклических конструкций в своих сценариях. В PowerShell доступно множество типов циклов, и один из них – это цикл for. Цикл for в PowerShell может позволить быстро выполнять один и тот же набор команд для нескольких элементов и получать последовательные результаты.
В этой статье вы узнаете, что такое цикл for в PowerShell, поймете его синтаксис и изучите, из чего состоит оператор цикла for. Вы также узнаете из примеров о различных способах использования цикла for.
Понимание оператора цикла for в PowerShell и заполнители
Цикл for в PowerShell обычно используется, когда количество раз (количество итераций), которое нужно выполнить команду или процесс, уже известно. Примером может быть ситуация, когда вы хотите обработать только подмножество значений в массиве (например, обработать только 10 из X числа элементов).
Использование цикла for дает больше контроля над ограничениями и условиями, при которых код должен завершить выполнение. Это в сравнении с циклом foreach или cmdlet ForEach-Object
, где итерация завершается после обработки последнего элемента в коллекции.
Ниже приведен синтаксис оператора цикла for для вашего справочного руководства.
Как видно из приведенного выше синтаксиса, оператор цикла for в PowerShell можно разбить на четыре заполнителя, которые вы должны знать. Это заполнители Инициализация, Условие, Повторение и Список операторов.
- Замещение Исходное – это место, где вы указываете начальное значение. Это значение читается только один раз оператором. Обычно сценаристы присваивают эту переменную значением нуля.
- Замещение Условие указывает предел или условие, определяющее, должен ли цикл продолжать работу или завершиться. Выражение, используемое в этом заполнителе, оценивается как истинное.
- Замещение Повторение принимает несколько команд. Команды, указанные в этом заполнителе, выполняются после каждого повторения цикла и перед повторной оценкой Условия. Обычно сценаристы используют это для предоставления выражения либо для увеличения, либо для уменьшения значения в замещении Исходное.
- Наконец, замещение Список операторов – это место, где будет размещен основной код, который вы собираетесь выполнить. Код внутри этого заполнителя повторяется в цикле до тех пор, пока Условие не вернет значение
$False
.
Понимание потока выполнения цикла for в PowerShell
Чтобы лучше понять, как работает цикл for в PowerShell, вам нужно ознакомиться с его потоком выполнения. Цикл for изначально является четырехшаговым процессом, который затем превращается в трехшаговый процесс после начального запуска. Для дальнейшего объяснения прочитайте алгоритм ниже.
ШАГ 1
В начале оператора цикла for значение Исходное считывается и сохраняется в памяти.
Пример: $num = 0
ШАГ 2
Оператор цикла for вычисляет логический результат выражения внутри заполнителя Condition. Если результат равен $false
, цикл for прекращается. Если результат равен $true
, то цикл for продолжается на следующий шаг.
Пример: $num -lt 10
ШАГ 3
PowerShell выполняет код внутри заполнителя Statement list. Здесь может быть одна или несколько команд, блоков сценариев или функций.
Пример: "Я считаю $num "
ШАГ 4
На этом этапе выполняется выражение в заполнителе Repeat, которое обновляет текущее значение заполнителя Initial. Затем выполнение переходит обратно к Шагу 2.
Пример: $num++
Использование цикла for в PowerShell (Примеры)
Далее приведены некоторые примеры использования цикла for различными способами. Эти примеры могут иметь или не иметь практического или реального применения как есть. Однако техники, которые вы изучите, могут помочь вам при необходимости использовать цикл for.
Теперь, когда вы поняли, как работает цикл for, пришло время увидеть, как это все работает вместе с базовым кодом.
Получение последовательности чисел
Ниже приведен код, который повторяет вывод строки "Я считаю $num"
в консоли, начиная с 1 и заканчивая 10.
Когда вы скопируете приведенный выше код и вставите его в свой сеанс PowerShell для его запуска, на этом скриншоте ниже вы увидите результат.

Конкатенация строк
Оператор цикла for не ограничен только математическими выражениями, такими как сложение, вычитание или умножение. Его также можно использовать для конкатенации строковых значений.
Приведенный ниже пример будет повторять букву “x” с увеличением количества символов на один с каждой следующей строкой, пока количество символов в строке не достигнет 30.
Как видно, значение $x
было инициировано с помощью ''
, которое не содержит символов. Предел на основе условия установлен до тех пор, пока количество символов в значении $x
не достигнет 30. После каждой итерации к значению $x
добавляется еще одна буква “x”.
Ниже приведен ожидаемый результат при выполнении указанного кода в PowerShell.

Конкатенация строк с несколькими начальными и повторяющимися выражениями
Местозаполнители Initial и Repeat в операторе цикла for могут принимать несколько выражений.
Используя код из предыдущего примера выше, код можно изменить, добавив новое выражение в местозаполнитель Repeat, чтобы выбрать случайный цвет. Случайный цвет затем будет использоваться как цвет переднего плана строки, отображаемой в консоли.
Как видно на первой строке, определен массив, содержащий имена цветов. Операция цикла for будет случайным образом выбирать имя цвета из этого массива.
Обратите внимание, что местозаполнители Initial и Repeat теперь имеют два выражения. Каждое выражение заключено в круглые скобки и разделено запятой.
Однажды измененный код запускается в PowerShell, ожидаемый результат отображается ниже.

Отображение Прогресса
Возможно, самое распространенное использование цикла for – отображение индикаторов прогресса. Это чаще всего используется при выполнении задач для большого количества элементов, которые могут занять время для завершения. Например, создание отчета о размерах всех почтовых ящиков в вашей организации Exchange или обновление атрибутов нескольких пользователей в Active Directory.
Приведенный ниже примерный код показывает вам основной способ отображения прогресса от 1 до 100%. Как видно, начальное значение $counter
равно 1, и условие указывает, что этот цикл будет выполняться, пока значение $counter
не достигнет 100.
При запуске указанного выше кода в PowerShell вы должны увидеть аналогичный вывод, как показано ниже.

Отображение Обратного Отсчета
Этот следующий код показывает, как использовать цикл for для отображения обратного отсчета. Этот обратный отсчет показывает только оставшееся время секунд, начиная с 10.
Если вы хотите изменить начальное число, вам нужно только изменить значение переменной $seconds
в месте Initial.
Запуск вышеуказанного кода в PowerShell приведет к следующему примерному выводу.

Отображение Обратного Отсчета (Вложенный Цикл for)
Что, если вы хотите отобразить таймер обратного отсчета в формате минуты:секунды
? Для этого можно использовать вложенный цикл вложенный. Вложенный цикл – это просто цикл, находящийся внутри другого цикла и так далее.
Приведенный ниже образец кода содержит два оператора цикла.
Первый цикл обрабатывает обратный отсчет минутной части таймера. Как видите, перед циклом for есть переменная $minutes
, где вы должны указать количество минут, с которого начнется обратный отсчет в цикле.
Второй цикл обрабатывает обратный отсчет секундной части таймера. После каждой итерации цикл приостанавливается на 1 секунду перед продолжением. Это будет продолжаться до тех пор, пока значение $seconds
не достигнет 0.
Когда вы запускаете указанный выше код, таймер обратного отсчета будет выглядеть следующим образом.

Определение простого числа
Цикл PowerShell также хороший выбор для математических операций. В этом примере цикл используется для определения, является ли заданное число простым числом.
A prime number is a number that is only divisible by 1 and N, where N is the number itself. For example, if the value of N is 7, then N divided by 1
is 7 divided by 1
.
Ниже приведен сценарий, который при выполнении выполняет следующее:
- Пригласить пользователя ввести число.
- Выполнить деление, используя введенное число в качестве делимого, а делители – числа от 2 до введенного числа минус 1. Это означает, что если введенное значение равно 7, делителями будут 2, 3, 4, 5 и 6 соответственно.
- Если частное является целым числом, это означает, что входное число не является простым числом, и затем цикл for будет завершен.
- Если частное не является целым числом, это означает, что входное число – простое число.
Скопируйте и сохраните этот сценарий как isPrime.ps1
После того как вы сохранили сценарий isPrime.ps1
, выполните его в PowerShell для тестирования. Для наглядности приведен пример вывода ниже.

Итог
Цикл for в PowerShell не вызывает удивлений по сравнению с тем, как работают циклы for в других языках, и это облегчает адаптацию, если вы уже знакомы с концепцией.
В этой статье вы узнали основы оператора цикла for в PowerShell. Вы узнали о его синтаксисе, логике, потоке выполнения, и даже узнали из нескольких примеров, как использовать его для различных целей.
Помните, что даже если в PowerShell есть другие типы циклов, нельзя сказать, что один лучше другого. Все зависит от цели кода и предпочтений того, кто пишет код.
Используя знания, полученные из этой статьи, вы должны быть способны применять цикл for чаще для автоматизации ваших обычных рутинных задач.