Чому ForEach-Object поводиться по-різному, коли його називають foreach?


3

У PowerShell foreachі %псевдоніми за замовчуванням до ForEach-Object. Однак, схоже, команда поводиться по-різному залежно від того, як її викликають.

Зокрема, мені важко отримати команду працювати, не подаючи вхід з конвеєра, якщо я спеціально не використовую foreachпсевдонім.

введіть тут опис зображення

Чи є тут щось, що я роблю неправильно, або це чомусь із дизайну?

Відповіді:


6

Заява foreach і cmdlet Foreach-Object НЕ одне і те ж.

Для одного:

У випадку Foreach-Object, орган оператора виконується, як тільки кожен об'єкт виробляється. У заяві foreach всі об'єкти збираються до початку виконання циклу циклу. Це має два наслідки

Існують також відмінності в продуктивності та синтаксисі.

$i = @(1..3) | ForEach-Object {Write-Host $_}

Чи працює в Foreach-Object.


Цей рядок скрипта працює foreach, ForEach-Objectі %. Це навіть можна скоротити до 1..3|%{$_}. :-)
Ізі

О, боже, не коді-гольф мене! @Iszi я фактично багато працюю над тим, щоб виписати свої команди більшу частину часу;) Мені подобаються читаються команди з кодом. Але дуже приємно.
Остін Т Французький

3
Навіщо використовувати foreach vs foreach-object? - "По-перше, важливо зрозуміти, що передчуття - новий об'єкт foreach, якщо він не використовується в трубопроводі."
Ƭᴇcʜιᴇ007

Схоже, якщо ми хочемо використовувати ForEach-Objectбез трубопроводів, із синтаксисом, дещо подібним до того, що foreachми можемо зробити ForEach-Object -InputObject (1..3) {$_}або % -i(1..3){$_}.
Іссі

1
Можливо, було б добре уточнити в першому реченні "Заява foreach і Forem-Object Cmdlet - це не ..." - для того, хто не знає відповіді, я думаю, було б корисно додатково розрізнити два спочатку. приціл (?) хтось ще хоче зважити на це?
Code Jockey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.