Цикл foreach powershell: Управление потоком — PowerShell | Microsoft Learn

Управление потоком — PowerShell | Microsoft Learn


  • Статья

  • Чтение занимает 5 мин

Написание сценариев

Когда вы переходите от написания однострочных элементов кода PowerShell к написанию сценариев, это может показаться намного сложнее, чем есть на самом деле. Сценарий — это всего лишь те же или похожие команды, которые вы можете запускать в интерактивном режиме в консоли PowerShell, если они не сохранены в виде файла .PS1. Существуют некоторые конструкции написания сценариев, которые вы можете использовать вместо командлета ForEach-Object, например цикл foreach. Эти различия могут ввести в заблуждение начинающих пользователей, особенно если они полагают, что foreach является конструкцией сценария и псевдонимом для командлета ForEach-Object.

Выполнение цикла

Одно из основных преимуществ PowerShell состоит в следующем: если вы определили способ выполнения задачи для одного элемента, вы можете так же легко выполнить ее для нескольких сотен элементов. Достаточно пройтись в цикле по этим элементам, используя один из множества различных типов циклов в PowerShell.

ForEach-Object

ForEach-Object — это командлет для прохода по элементам в конвейере, например с помощью однострочных элементов кода PowerShell. ForEach-Object осуществляет потоковую передачу объектов по конвейеру.

Хотя параметр Module для Get-Command принимает несколько значений в виде строк, он осуществляет это только через входные данные конвейера по имени свойства или через входные данные параметра. В следующем сценарии, если мне нужно передать две строки по значению в Get-Command для использования с параметром Module, я буду использовать командлет ForEach-Object.

'ActiveDirectory', 'SQLServer' |
   ForEach-Object {Get-Command -Module $_} |
     Group-Object -Property ModuleName -NoElement |
         Sort-Object -Property Count -Descending
Count Name
----- ----
  147 ActiveDirectory
   82 SqlServer

В предыдущем примере текущим объектом является $_. Начиная с PowerShell версии 3.0 $PSItem можно использовать вместо $_. Но я встречаюсь с тем, что самые опытные пользователи PowerShell все еще предпочитают использовать $_, так как он обеспечивает обратную и меньшую совместимость.

При использовании ключевого слова foreach вы должны сохранить все элементы в памяти, прежде чем по ним проходить, а это может быть нелегкой задачей, если не знать, с каким количеством элементов вы работаете.

$ComputerName = 'DC01', 'WEB01'
foreach ($Computer in $ComputerName) {
  Get-ADComputer -Identity $Computer
}
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=mikefrobbins,DC=com
DNSHostName       : dc01.mikefrobbins.com
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : c38da20c-a484-469d-ba4c-bab3fb71ae8e
SamAccountName    : DC01$
SID               : S-1-5-21-2989741381-570885089-3319121794-1001
UserPrincipalName :
DistinguishedName : CN=WEB01,CN=Computers,DC=mikefrobbins,DC=com
DNSHostName       : web01.mikefrobbins.com
Enabled           : True
Name              : WEB01
ObjectClass       : computer
ObjectGUID        : 33aa530e-1e31-40d8-8c78-76a18b673c33
SamAccountName    : WEB01$
SID               : S-1-5-21-2989741381-570885089-3319121794-1107
UserPrincipalName :

Цикл foreach или ForEach-Object нужно обязательно выполнить несколько раз, иначе вы получите сообщение об ошибке.

Get-ADComputer -Identity 'DC01', 'WEB01'
Get-ADComputer : Cannot convert 'System. Object[]' to the type
'Microsoft.ActiveDirectory.Management.ADComputer' required by parameter 'Identity'.
Specified method is not supported.
At line:1 char:26
+ Get-ADComputer -Identity 'DC01', 'WEB01'
+                          ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADComputer], ParameterBindingExc
   eption
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management
   .Commands.GetADComputer

В других случаях вы можете получить те же результаты, одновременно удаляя цикл. Чтобы разобраться с параметрами, сверьтесь со справкой по командлетам.

'DC01', 'WEB01' | Get-ADComputer
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=mikefrobbins,DC=com
DNSHostName       : dc01.mikefrobbins.com
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : c38da20c-a484-469d-ba4c-bab3fb71ae8e
SamAccountName    : DC01$
SID               : S-1-5-21-2989741381-570885089-3319121794-1001
UserPrincipalName :
DistinguishedName : CN=WEB01,CN=Computers,DC=mikefrobbins,DC=com
DNSHostName       : web01. mikefrobbins.com
Enabled           : True
Name              : WEB01
ObjectClass       : computer
ObjectGUID        : 33aa530e-1e31-40d8-8c78-76a18b673c33
SamAccountName    : WEB01$
SID               : S-1-5-21-2989741381-570885089-3319121794-1107
UserPrincipalName :

Как вы видите в предыдущих примерах, параметр Identity для Get-ADComputer принимает только одно значение, если оно предоставлено с помощью входных параметров, и при этом позволяет получить несколько элементов, если входные данные предоставляются через входные данные конвейера.

Для

Цикл for выполняет итерацию до тех пор, пока заданное условие имеет значение «Истина». Цикл for я использую редко, но все же использую.

for ($i = 1; $i -lt 5; $i++) {
  Write-Output "Sleeping for $i seconds"
  Start-Sleep -Seconds $i
}
Sleeping for 1 seconds
Sleeping for 2 seconds
Sleeping for 3 seconds
Sleeping for 4 seconds

В предыдущем примере цикл будет повторяться четыре раза, начиная с числа 1, и продолжит выполняться до тех пор, пока переменная счетчика $i не составит значение менее 5. Этот цикл будет бездействовать в течение всего 10 секунд.

Как нужно

В PowerShell существуют два разных цикла do. Цикл Do Until выполняется до тех пор, пока заданное условие имеет значение «Ложь».

$number = Get-Random -Minimum 1 -Maximum 10
do {
  $guess = Read-Host -Prompt "What's your guess?"
  if ($guess -lt $number) {
    Write-Output 'Too low!'
  }
  elseif ($guess -gt $number) {
    Write-Output 'Too high!'
  }
}
until ($guess -eq $number)
What's your guess?: 1
Too low!
What's your guess?: 2
Too low!
What's your guess?: 3

В предыдущем примере показана игра с цифрами, которая будет продолжаться до тех пор, пока значение, которое вы выдаете, не будет равняться тому же числу, которое было создано командлетом Get-Random.

Цикл Do While — полная противоположность. Он выполняется до тех пор, пока заданное условие не примет значение «Истина».

$number = Get-Random -Minimum 1 -Maximum 10
do {
  $guess = Read-Host -Prompt "What's your guess?"
  if ($guess -lt $number) {
    Write-Output 'Too low!'
  } elseif ($guess -gt $number) {
    Write-Output 'Too high!'
  }
}
while ($guess -ne $number)
What's your guess?: 1
Too low!
What's your guess?: 2
Too low!
What's your guess?: 3
Too low!
What's your guess?: 4

Аналогичные результаты можно получить с помощью цикла Do While, изменив условие проверки на значение «Не равно».

Циклы Do всегда выполняются не менее одного раза, так как заданное условие вычисляется в конце цикла.

While

Цикл Do While, как и цикл While, выполняется до тех пор, пока заданное условие имеет значение «Истина». При этом различие состоит в том, что цикл While принимает условие в верхней части цикла перед выполнением любого кода. Поэтому этот цикл не выполняется, если условие принимает значение «Ложь».

$date = Get-Date -Date 'November 22'
while ($date.DayOfWeek -ne 'Thursday') {
  $date = $date.AddDays(1)
}
Write-Output $date
Thursday, November 23, 2017 12:00:00 AM

В предыдущем примере вычисляется, на какой день недели приходится День благодарения в США. Этот день всегда приходится на четвертый четверг ноября. Поэтому цикл начинается с 22-го дня ноября и добавляет один день, когда день недели не равен четвергу. Если на 22-е число выпадает четверг, цикл не выполняется.

Инструкции «Прервать», «Продолжить» и «Вернуть»

Инструкция Break используется для прерывания цикла. Кроме того, она часто используется с инструкцией switch.

for ($i = 1; $i -lt 5; $i++) {
  Write-Output "Sleeping for $i seconds"
  Start-Sleep -Seconds $i
  break
}
Sleeping for 1 seconds

Инструкция break, показанная в предыдущем примере, приводит к выходу цикла в первой итерации.

Инструкция «Продолжить» позволяет перейти к следующей итерации цикла.

while ($i -lt 5) {
  $i += 1
  if ($i -eq 3) {
    continue
  }
  Write-Output $i
}
1
2
4
5

В предыдущем примере выводятся числа 1, 2, 4 и 5. В нем исключается число 3 и выполняется переход к следующей итерации цикла. Инструкция break, как и continue, прерывает цикл, только если это не текущая итерация. Затем процесс переходит к следующей итерации, а не к прерыванию и остановке цикла.

Инструкция «Вернуть» позволяет выйти из существующей области.

$number = 1..10
foreach ($n in $number) {
  if ($n -ge 4) {
    Return $n
  }
}
4

Обратите внимание, что в предыдущем примере возвращаются выходные данные первого результата, а затем выход из цикла. Более подробное описание инструкции о результатах можно найти в одной из моих статей блога. The PowerShell return keyword

Сводка

В этой главе вы узнали о разных типах циклов, существующих в PowerShell.

Просмотр

  1. Чем отличается командлет ForEach-Object от конструкции сценариев foreach?
  2. В чем основное преимущество использования цикла While от цикла Do while или Do Until?
  3. Как различаются инструкции «Прервать» и «Продолжить»?

Рекомендуем прочесть

  • ForEach-Object
  • about_ForEach
  • about_For
  • about_Do
  • about_While
  • about_Break
  • about_Continue
  • about_Return

Циклы Powershell — Системный Администратор

Циклы необходимы для повторного выполнения одинаковых операций с использованием разных значений. Есть циклы обрабатывающие данные получаемые из конвейера (ForEach-Object) и работающие отдельно (ForEach). Рассмотрим все возможные циклы Powershell подробнее.

ForEach

Цикл ForEach служит для пошаговой переборки значений из коллекции элементов. Обычно при помощи цикла foreach перебирают элементы в массиве. ForEach является самым простым для понимания и чаще всего используемым циклом в Powershell. ForEach не работает с конвейером для этого есть ForEach-Object. Посмотрим на синтаксис ForEach.

foreach ($item in $collection)
{script block}

Переменная $collection это массив определенный заранее. Переменная $item — это текущий элемент из $collection. По очереди перебираются все элементы из массива $collection. Далее в фигурных скобках обычно вызывают переменную $item обращаясь к текущему элементу коллекции. Перейдем к примерам. Рассмотрим простейший сценарий по удалению старых журналов сервера IIS.

$data=((Get-Date).Date).AddDays(-10)
$massiv=Get-ChildItem C:\script\ |Where-Object {$_.LastWriteTime -lt $data}
foreach ($a in ($massiv).Fullname)
{
Remove-Item $a
}

В переменной $data я вычисляю текущую дату минус 10 дней. В $massiv указываю путь к логам C:\script\ и фильтрую список файлов с датой последней записи позже 10 дней от текущей даты. Далее в цикле foreach удаляю каждый файл из переменной $massiv. Скрипт довольно простой но в тоже время полезный.

Рассмотрим пример попроще. Создадим переменную с массивом чисел и в цикле к каждому числу прибавим 10.

$test=1,2,3,4,5
foreach ($name in $test)
{
$name+10
}

После прохода цикла foreach к каждому числу в массиве $test прибавится 10.

Циклы Powershell foreach являются самыми распространенными.

ForEach-Object

Цикл ForEach-Object выполняет операцию над каждым элементом в коллекции входных объектов. Входные объекты передаются командлету ForEach-Object по конвейеру или могут быть заданы с помощью параметра InputObject. Цикл ForEach-Object поддерживает блоки begin, process, и end используемые в функциях.

Существует три способа построения команд в ForEach-Object. Давайте их перечислим.

Блок сценария

Блок сценария (Script block) — для задания операции используется блок скриптов. С помощью переменной $_ подставляется текущий объект. Блок сценария может содержать любой сценарий PowerShell. Рассмотрим пример с получением списка запущенных процессов.

Get-Process | ForEach-Object {$_.ProcessName}

Блоки сценария выполняются в области действия вызывающего объекта. Т.е. блоки имеют доступ к переменным в этой области и могут создавать новые переменные, которые сохраняются после завершения командлета.

Оператор выражения

Оператор выражения (Operation statement) — в данном случае вы можете использовать оператор сразу указывая значение свойства. Данный способ написания визуально более удобен и проще читается. Эта особенность впервые появилась в Windows PowerShell 3.0. Рассмотрим на примере все того же Get-Process

Get-Process | ForEach-Object ProcessName

Как видно из примера в данном случае вывод абсолютно такой же как и в случае написания блока сценария.

Сегодня мне поступила задачка, по списку имен сотрудников (список в текстовом файле) вывести соответствующие почтовые адреса из Microsoft Exchange. Делается это одной строкой как раз с использованием ForeEach-Object.

Get-Content C:\Temp\sotr.txt|ForEach-Object {Get-Mailbox $_ -ErrorAction SilentlyContinue}|ft Displayname, WindowsEmailAddress -AutoSize

На входе у меня список сотрудников в текстовом файле sotr.txt. Считанную информацию из файла передаю по конвейеру циклу ForeEach-Object. В цикле командлет Get-Mailbox поочередно для каждого сотрудника из файла считывает информацию и на выходе командлет ft (алиас Format-Table) выводит таблицу с данными: ФИОEMAIL

Блок сценария (параллельный запуск)

Блок сценария (параллельный запуск) — это новая функция доступна с версии Windows Powershell 7.0 позволяет запускать блоки сценария параллельно. Используя параметр ThrottleLimit можно ограничить количество одновременно работающих скриптов. В данном случае как и раньше используется переменная $_ для подстановки текущего входного объекта. Используйте $using для передачи ссылок на переменные в запущенный скрипт.

В Microsoft Windows PowerShell 7 для каждой итерации цикла создается новое пространство выполнения, обеспечивающее максимальную изоляцию. В связи с этом нужно четко понимать что объем обрабатываемых данных не займет все ресурсы системы. Если объем данных по циклу большой используйте ThrottleLimit. Это позволит ограничить нагрузку на систему и сохранить работоспособность других сервисов. Благодаря параллельному запуску сценарий будет отрабатываться значительно быстрее.

Давайте посмотрим на тестовый скрипт с использованием параллельного запуска.

Get-ChildItem C:\Windows\ -Recurse|ForEach-Object -Parallel {if ($_.Length -ge 100) {$_.Name |Out-File C:\Temp\files.txt -Append}} -ThrottleLimit 10

Я получаю список всех файлов и передаю их на вход ForEach-Object. Цикл параллельно (10 проходов за раз) проходит по каждому файлу и в случае превышения размера более 100 байт записывает его в файл. Это создает хорошую нагрузку на систему. Давайте посмотрим разницу в загруженных ресурсах.

Скрипт отработал 1 минуту и за это время при параллельной обработке памяти затрачено 1 ГБ против 118 Мб при последовательной. Это практически в 10 раз больше. Стоит ли скорость отработки затраченным ресурсам решать вам.

While

Цикл While — это языковая конструкция выполняющая команды в командном блоке, пока условие верно. While довольно прост в написании, давайте посмотрим на синтаксис.

while (<условие>){<выполняемые команды>}

Вначале While оценивает условие в круглых скобках, если оно верно (True) следует выполнение блока команд в фигурных скобках. После первого прохода снова происходит проверка условия и так бесконечно (если его не прервать операторами выхода). Цикл While завершает свою работу если условие становится не верным (False).

Возьмем простейший пример. Введем новую переменную $a и присвоим ей значение 1. Далее цикл while будет проверять значение $a и пока оно не будет равно 10 выполняется блок команд. В блоке к $a будет прибавляться 1 с каждым проходом цикла. В момент когда $a станет равно 10 цикл остановится.

$a=1
while($a -ne 10)
{
    $a++
    Write-Host $a
}

Можно записать цикл и одной строкой, однако читать уже не так удобно

while($a -ne 10){$a++; Write-Host $a}

В данном случае я не задал переменную $a и изначально она пустая. Но с каждой итерацией цикла к ней прибавляется 1.

Еще один пример, пригодится в жизни. Напишем сценарий постоянно проверяющий запущен ли процесс. Если процесс запущен то ничего не делать, если не запущен то запустить.

$a=1
while($a -eq 1)
{
    if ([bool](Get-Process notepad -ErrorAction SilentlyContinue) -eq $true) 
    {Write-Host "Блокнот запущен! "}
    else
    {Start-Process notepad}
    Start-Sleep -Seconds 30
}

В данном случае while проверяет $a=1, если да то выполнить набор команд. Но $a у меня всегда 1 поэтому цикл будет бесконечный. Это простой пример скрипта для контроля запущенного процесса.

Do

Do работает с циклом While или Until для использования операторов в блоке скрипта в зависимости от условия. Разница между While и Do-While в том, что блок скрипта в цикле Do всегда выполняется как минимум один раз.

В цикле Do-While условие вычисляется после выполнения блока скрипта. Так же как в While блок скрипта повторяется до тех пор, пока условие оценивается как верное.

$z = 14 
Do { 
    Write-Host "Z=$z" 
    $z++
} 
While($z -le 20)

Цикл Do-Until выполняется минимум один раз перед вычислением условия. Однако блок скрипта запускается когда условие ложно. Когда условие станет верным цикл Do-Until завершит работу.

Do 
{
    if (([bool](Get-Process notepad -ErrorAction SilentlyContinue)) -eq $False)
    {Write-Host "Блокнот не запущен"
    Start-Sleep -Seconds 10}
}
Until (([bool](Get-Process notepad -ErrorAction SilentlyContinue )))
Write-Host "УРА! Блокнот запустили"

Данный скрипт проверяет запущен ли блокнот. Если не запущен выполняется условие в фигурных скобках после Do. Цикл выполняется до тех пор пока блокнот не запустят.

Continue и Break

Операторы Continue и Break работают со всеми типами циклов, кроме ForEach-Object. Они могут работать с метками. Метка — имя которое можно присвоить оператору. Формат задания меток :metka цикл(условие) {блок скрипта}.

Оператор Continue предоставляет возможность выхода из текущего блока управления. После выхода из блока цикл продолжит выполнение. В момент вызова Continue текущая итерация цикла завершается и цикл продолжится со следующей итерацией.

Рассмотрим на примере цикла While. Командлет Get-Process ищет запущенные процессы notepad. Если запущен один процесс notepad то сработает Continue и цикл продолжится со следующей итерацией. Когда запущено более 1 процесса notepad все процессы с данным именем будут закрыты.

$a=1
while($a -eq 1)
{
    if ((Get-Process notepad -ErrorAction Continue).Count -eq 1) 
    {Continue}
    else
    {Stop-Process -Name notepad -ErrorAction Continue}
    Start-Sleep -Seconds 10
}

Оператор Break позволяет выйти из текущего блока управления. Выполнение продолжается на следующем операторе после блока управления. Данный оператор очень удобен если необходимо выйти из постоянно повторяющегося цикла.

Рассмотрим пример с постоянно повторяющимся циклом, остановить который сможет только запуск процесса notepad

$z=1
while ($z=1) {
Write-Host "Я бесконечный цикл!"
Start-Sleep 3
if (Get-Process -Name notepad -ErrorAction SilentlyContinue) {break}
}
Write-Host "Наконец то цикл завершен"

Операторы Continue и Break отлично дополняют циклы Powershell еще больше расширяя их возможности.

For

Цикл For — обычно используется для создания цикла, выполняющего команды в командном блоке пока указанное условие оценивается как верное ($True).

Рассмотрим простейший пример цикла for

for ($z=2; $z -le 20; $z++)
{
    Write-Host "Текущее значение переменной z="$z
}

В цикле я задаю переменной z значение 2. Блок команд в фигурных скобка выполняется по $z меньше или равно 20.

В данной статье я рассмотрел все циклы Powershell существующие на данный момент. Какие из них использовать в работе конечно же решать вам. До новых встреч 🙂

П.С.: задать вопросы, пообщаться, обсудить статью циклы Powershell можно у меня в VK.

Рекомендую к прочтению:

  • Powershell скрипты
  • Переменные
  • Операторы сравнения
  • Операторы условий
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.

Поделиться:

ForEach — PowerShell — SS64.com

ForEach — PowerShell — SS64.com

  • SS64
  • PowerShell
  • Практическое руководство

Пройтись по набору входных объектов и выполнить операцию (выполнить блок операторов) для каждого из них.

 Синтаксис
      ForEach [-Parallel] (  элемент   В   коллекция  ) {  ScriptBlock  }

ключ
     элемент  Переменная для хранения текущего элемента
     коллекция  Коллекция объектов, например. имена файлов, ключи реестра, имена серверов
     ScriptBlock  Блок скрипта, запускаемый для каждого объекта.
   -Parallel Параллельное выполнение команд один раз для каждого элемента (только рабочий процесс PowerShell). 

Коллекция будет оценена и сохранена как массив в памяти перед выполнением блока сценария .

Оператор foreach не использует конвейерную обработку (в отличие от ForEach-Object ). Если вы используете foreach в конвейере команд, PowerShell фактически запустит псевдоним foreach, который вызывает ForEach-Object.

Используйте оператор ForEach, когда набор объектов достаточно мал, чтобы его можно было загрузить в память.
Используйте командлет ForEach-Object, если вы хотите передавать только один объект за раз через конвейер, сводя к минимуму использование памяти. В большинстве случаев ForEach будет работать быстрее, чем ForEach-Object, но есть исключения, такие как запуск нескольких фоновых заданий. Если вы сомневаетесь, проверьте оба варианта с помощью Measure-Command.

ForEach -Parallel действителен только в рабочем процессе PowerShell, в настоящее время нет общей параллельной поддержки для ключевого слова foreach.

В PowerShell 4.0 и более поздних версиях метод ForEach обеспечивает еще более высокую производительность.

Примеры

Цикл по массиву строк:

 $trees = @(«Ольха»,»Ясень»,»Береза»,»Кедр»,»Каштан»,»Вяз»)

 foreach ($tree в $trees) {
«$tree = » + $tree. length
}

Пройтись по набору чисел, повторяя каждое число, если число не равно 2:

 для каждого ($число в 1,2,3,4,5) {
если ($num -eq 2) {продолжить}; $номер
}

Цикл по набору файлов .txt:

  foreach ($file в get-ChildItem *.txt) {
Эхо $file.name
}

«Единственный способ хорошо работать — это любить то, что ты делаешь. Если вы еще не нашли его, продолжайте искать. Не соглашайтесь. Как и во всех сердечных делах, вы поймете, когда найдете это» — Стив Джобс

Связанные командлеты PowerShell:

Переменная $foreach — ссылается на перечислитель в цикле foreach.
Оператор Break
Оператор Continue
ForEach-Object — Цикл для каждого объекта в конвейере (foreach).
ForEach (метод) — циклический просмотр элементов в коллекции.
For — циклический просмотр элементов, соответствующих условию.
IF — Условно выполнить команду.
Переключатель — Несколько операторов if.
While — Цикл, пока условие истинно.


 

Copyright © 1999-2022 SS64.com
Некоторые права защищены

PowerShell Foreach Loop — Javatpoint

следующий →
← предыдущая

Цикл Foreach также известен как оператор Foreach в PowerShell. Foreach — это ключевое слово, которое используется для цикла по массиву или набору объектов, строк, чисел и т. д. В основном этот цикл используется в тех ситуациях, когда нам нужно работать с одним объектом за раз.

Синтаксис

В следующем блоке показан синтаксис цикла Foreach :

Foreach ($ в $)
{
Заявление-1
Заявление-2
Заявление-N
}

В этом синтаксисе — это отдельное значение переменной или объекта, которое изменяется на каждой итерации. <коллекция> — это массив или набор чисел и строк, к которым вы хотите получить доступ. Когда этот цикл выполняется, PowerShell создает переменную $ автоматически. В синтаксисе есть блок, который содержит один или несколько операторов, которые выполняются для каждого элемента в коллекции.

Блок-схема цикла ForEach

Примеры

Пример 1: В следующем примере значение массива отображается с использованием цикла foreach :

PS C:\> $Массив = 1,2,3,4,5,6,7,8,9,10
PS C:\> foreach ($число в массиве $)
>> {
>> эхо $число
>> }

Вывод:

 1
2
3
4
5
6
7
8
9
10
 

В этом примере массив $Array создается и инициализируется целочисленными значениями 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 . При первом выполнении оператора Foreach целочисленное значение ‘ 1 ‘ массива присваивается переменной $number . Затем он использует командлет echo для отображения числа 1. В следующий раз в цикле $number устанавливается равным 2 и так далее.

Imacros | Все права защищены © 2021