Циклы

Командлет ForEach-Object

Foreach-Object — командлет для обработки потоков данных.

Foreach-Object применяется для построчной обработки элементов по мере их поступления во входной поток:

ForEach-Object -InputObject (Get-Process) -Process { $_ }
Get-Process | ForEach-Object { $_.Name }
Get-Process | % { $_.Name }                          # % — псевдоним ForEach-Object
Get-Process | foreach { $_.Name }                    # alias ключевого слова foreach

Операторы break и continue не работают с ForEach-Object, т.к. это не цикл в привычном понимании, а обработка объекта конвейером.

Цикл Foreach

Цикл Foreach — это цикл для обработки коллекций.

Цикл foreach итерируется по коллекции:

foreach ($item in $array) {
  # действия с $item
}

Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующей.

Оператор break полностью прерывает цикл.

Для выхода из вложенных циклов можно использовать метку:

:outer foreach ($i in $array1) {
  foreach ($j in $array2) {
    if (<условие>) { break outer }
  }
}

Метод ForEach

Метод ForEach() в PowerShell — это метод коллекций (например, массивов, списков), который позволяет выполнить указанный скрипт или действие для каждого элемента коллекции. Он вызывается на объекте коллекции, принимает блок скрипта и последовательно применяет его к всем элементам, передавая текущий элемент в специальную переменную $PSItem (аналог $_ в конвейерах).

$collection.ForEach({ 
    # Здесь $PSItem - текущий элемент коллекции
    Write-Output $PSItem 
})

Этот метод удобен, когда надо выполнить действие для элементов коллекции без использования цикла foreach или командлета ForEach-Object.

Цикл For

Цикл For — классический итеративный цикл.

Синтаксис похож на языки C-подобного типа:

for (инициализация; условие; действие) {
  # тело цикла
}

Пример:

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

Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующей.

Оператор break полностью прерывает цикл.

Циклы While и Do-While

Цикл While — это цикл с предусловием. While сначала проверяет условие, потом выполняет тело:

while ($a -le 10) {
  $a++
}

Цикл Do-While — это цикл с постусловием. Do-While сначала выполняет тело, потом проверяет условие:

do {
  $i++
} while ($i -le 10)

Выполнение повторяется, пока условие истинно.

Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующей.

Оператор break полностью прерывает цикл.

Цикл Do-Until

Цикл Do-Until выполняет тело, а затем проверяет условие на ложь:

do {
  $i++
} until ($i -le 10)

Он повторяет тело, пока условие НЕ выполняется.

Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующей.

Оператор break полностью прерывает цикл.

Работа с циклами

С примерами использования можно ознакомиться по ссылке:

Last updated