Существует две различные базовые конструкции :
То, к чему относится foreach
, зависит от контекста синтаксического анализа - см. about_Parsing
:
В режиме аргумента (в контексте команды ) foreach
является псевдонимом ForEach-Object
.
В режиме выражения (точнее: оператор режим в данном случае), foreach
- это foreach
l oop оператор .
В качестве командлета , ForEach-Object
работает на конвейерный ввод .
Как оператор языка , foreach
l oop работает с переменными и выражениями (который может включать выходные данные, собранные из команд).
Используйте его для эффективной обработки результатов, уже собранных в памяти, через self -выбрать переменную итератора (например, $num
in foreach ($num in 1..3) { ... }
); делает это заметно быстрее , чем обработка с помощью ForEach-Object
.
Обратите внимание, что вы не можете отправлять выходные данные из оператора foreach
непосредственно в конвейер, потому что грамматика PowerShell не позволяет этого; для потоковой передачи вывода в конвейер оберните оператор foreach
в & { ... }
. (Напротив, простые выражения (например, 1..3
) могут быть отправлены непосредственно в конвейер).
Для получения дополнительной информации, сравнение производительности и обсуждение компромиссов (использование памяти и производительность), включая .ForEach()
метод массива , см. этот ответ .