Циклы for и foreach в powershell. Пожалуй стоит начать с простого и двигаться к сложному. В этой статье мы разберемся с циклами for и foreach. Изучим их работу и рассмотрим некоторые примеры.
Powershell — Циклы for и foreach
Начнем с цикла foreach. Цикл foreach позволяет перебирать значения, которые находятся в массиве без условий. Единственное условие на словах выглядит так: выполнить действие для каждого элемента массива.
Весьма просто не так ли? Давайте попробуем написать ваш первый foreach. Создать массив целых чисел и прибавим к каждому из них по единице. Безусловно можно воспользоваться оператором сложения. Но как быть в случае, когда массив динамически формируется при каждом прогоне скрипта? Давайте используем foreach:
1 2 3 4 5 6 7 |
[array]$numbers = 1, 2, 103 foreach ($number in $numbers) { $number + 1 } 2 3 104 |
Давайте разбираться, как это работает все то, что написано после foreach. Первым делом мы объявляем уникальную переменную $number для каждого числа из массива $numbers. Ее можно назвать как угодно, но важно понимать, что в дальнейшем действия арифметические или логические происходят именно для этой переменной. Дальше это показано наглядно. К числу, которое находится в переменной $number, инструкция цикла прибавляет единицу.
Другими словами, если бы мы перебирали элементы массива вручную, то нам бы пришлось делать так:
1 2 3 |
$numbers[0] + 1 $numbers[1] + 1 $numbers[2] + 1 |
Цикл foreach сделал это за нас, занося при каждой итерации следующий элемент массива в переменную $number. Если постараться объяснить еще проще, то выглядит это примерно так:
1 2 3 4 5 6 7 8 9 10 11 |
foreach ($number in $numbers) { #Первая итерация $numbers[0] + 1 } foreach ($number in $numbers) { #Вторая итерация $numbers[1] + 1 } foreach ($number in $numbers) { #Третья итерация $numbers[2] + 1 } |
Думаю с циклом foreach мы разобрались. Парочка примеров, что можно делать с помощью него.
- Получить содержимое файлов:
12345678[Array]$files = (Get-ChildItem "D:\Powershell\текст*")foreach ($file in $files) {Get-Content $file}стопицотдвестипяцотСТОПИСЯТ - Перебрать сервера и проделать ряд операций по копированию файлов извне:
123456789param([String]$Servers, [String]$Source, [string]$Target)$ServerNames = $Serversforeach ($serverName in $ServerNames){$TargetPath = "\\$serverName\$Target"Copy-Item $Source $TargetPath -Recurse -Force}
Теперь переходим к циклу for. Он немного сложнее в освоении, но достаточно один раз понять, как правильно его написать, и каждый последующий раз будет даваться легко. Используем тот же массив из чисел. Конструкция цикла for в powershell отличается от foreach и выглядит так:
1 2 3 |
for ($i=0; $i -lt $numbers.Length; $i++) { $numbers[$i]+10; } |
Теперь по порядку. В скобках указана конструкция в которой обозначены: объект; условие; действие. В нашем случае объект — это переменная $i равная нулю. Условие — переменная $i меньше длины массива $numbers. Действие — инкрементировать переменную $i (простыми словами в данном контексте увеличить на 1).
В самом теле цикла мы обращаемся к элементам массива по индексу. Индекс в первой итерации равен нулю потому, что мы используем переменную $i для работы с массивом. Соответственно в каждой итерации индекс становится больше на единицу.
Итог
У циклов foreach и for в powershell весьма объемная сфера применения. Это помогает в администрировании серверов и файлов, которых иногда очень много. Надеюсь статья была для вас полезной! Подписывайтесь на нашу группу в ВК и не забывайте про канал на youtube! Если у вас остались вопросы по циклам — пишите их в комментариях!