Циклы#
Командлет 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 полностью прерывает цикл.
Работа с циклами#
С примерами использования можно ознакомиться по ссылке: