В этом руководстве по PowerShell мы покажем вам, как использовать цикл For, цикл ForEach-Object, а также циклы While, Do-While и Do-Until.
Циклы PowerShell, по сути, просто повторяют один и тот же набор команд определенное количество раз. Идеально подходящие для выполнения последовательных действий в течение заданного периода времени или определенного количества записей, циклы могут значительно упростить ваши сценарии. В PowerShell, в частности, имеется ряд командлетов, особенно тех, которые начинаются с глагола Get, которые возвращают объекты, содержащие большое количество похожих данных.
В PowerShell доступно несколько типов циклов, и во многих случаях можно эффективно использовать более одного метода цикла. Иногда требуется определить наиболее эффективный тип цикла либо с точки зрения производительности, либо с точки зрения удобочитаемости кода.
Цикл ForEach-Object
Во многих случаях использование командлета ForEach-Object (ранее обсуждалось в нашей статье о работе с объектами PowerShell) является лучшим способом циклического просмотра объекта. В самом простом случае ForEach-Object требует только объекта, через который должен проходить цикл, и блока скрипта, содержащего команды, которые должны выполняться для каждого члена объекта.
Эти параметры можно указать либо с помощью имен параметров -InputObject и -Process, либо путем передачи объекта в командлет ForEach-Object и размещения блока скрипта в качестве первого параметра. Чтобы проиллюстрировать этот базовый синтаксис, в следующем примере показаны два метода использования ForEach-Object для циклического просмотра содержимого пользовательской папки Documents:
$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File $myDocuments | ForEach-Object {$_.FullName} ForEach-Object -InputObject $myDocuments -Process {$_.FullName}
В некоторых сценариях может быть полезно выполнить одно или несколько действий непосредственно перед или сразу после выполнения цикла. Параметры -Begin и -End могут использоваться для определения блоков сценария, которые должны выполняться непосредственно перед или после содержимого блока сценария -Process. Это можно использовать для установки или изменения переменной до или после выполнения цикла.
ForEach-Object имеет два псевдонима, ForEach и %, а также поддерживает сокращенный синтаксис, начиная с PowerShell 3.0. Следующие три примера идентичны по функциям.
Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | % Свободное место
PowerShell для цикла
Циклы for обычно используются для повторения набора команд заданное количество раз, либо для пошагового прохождения массива или объекта, либо просто для повторения одного и того же блока кода по мере необходимости. Цикл For строится путем установки значения переменной при входе в цикл, условия, при котором цикл должен быть завершен, и действия, которое должно выполняться с этой переменной каждый раз в цикле.
В следующем примере показан базовый цикл For, используемый для создания таблицы умножения:
For ($i=0; $i -le 10; $i++) { «10 * $i = » + (10 * $i)}
Циклы for можно использовать для пошагового прохождения значений массива, устанавливая начальное значение в начальный индекс массива и постепенно увеличивая значение до тех пор, пока не будет достигнута длина массива. Индекс массива указывается путем помещения переменной с приращением в квадратные скобки сразу после имени переменной, как показано в следующем примере:
$colors = @(«Красный»,»Оранжевый»,»Желтый»,»Зеленый»,»Синий»,»Индиго»,»Фиолетовый») For ($i=0; $i -lt $colors.Length; $ я++) {$цвета[$i]}
Циклы While, Do-While и Do-Until
Третий тип цикла, который поддерживает PowerShell, включает установку условия, которое либо позволяет циклу работать, пока условие истинно, либо пока оно не будет выполнено. Циклы While и Do-While используются для выполнения действия, пока условие оценивается как $true, и отличаются только своим синтаксисом. Циклы Do-Until имеют синтаксис, аналогичный Do-While, но прекращают обработку после выполнения оператора условия.
Циклы Do-While и Do-Until начинаются с ключевого слова Do, предшествующего блоку скрипта, за которым следует ключевое слово условия (While или Until) и условие. Например, следующие два цикла функционируют одинаково, только условия меняются местами:
$i=1 Делать { $i $i++} Пока ($i -le 10)$i=1 Делать { $i $i++ } До ($i -gt 10)
Хотя циклы работают так же, как циклы Do-While, только немного изменен синтаксис. Циклы while используют только ключевое слово While, за которым следует условие и, наконец, блок скрипта. Этот цикл по функциям идентичен предыдущим примерам и использует то же условие, что и цикл Do-While:
$i=1 Пока ($i -le 10) { $i $i++ }
Любой из этих трех типов циклов — Do-While, Do-Until и While — также может использоваться для бесконечного цикла; Циклы while и Do-While с условием, установленным в $true, и Do-Until с условием, установленным в $false.
В некоторых ситуациях вам может потребоваться преждевременный выход из цикла на основе чего-то другого, кроме условия цикла. В этом случае можно вызвать ключевое слово Break, чтобы выйти из цикла. Этот последний пример демонстрирует ту же функциональность, но использует бесконечный цикл и ключевое слово Break для выхода в нужное время:
$i=1 Пока ($true) { $i $i++ if ($i -gt 10) { Break } }
СВЯЗАННЫЙ:
Операторы сравнения PowerShell и условная логика
PowerShell: использование переменных, массивов и хэш-таблиц
Основы PowerShell: управление файлами и папками