Как передать вывод с foreach, в powershell - PullRequest
2 голосов
/ 20 ноября 2019

Я пытаюсь передать вывод из цикла foreach в команду форматирования, но она не работает. Я думаю, что это возможно, потому что это работает.

$op = foreach ($file in (Get-ChildItem -File)) {
    $file |
    Get-Member |
    Where-Object {$_.MemberType -eq "Method" -and $_.Definition -like "*system*" } |
    Select-Object -Property Name, MemberType
}

$op | Format-List

Если я могу назначить весь вывод переменной и передать переменную в другую команду, почему следующее НЕ работает?

(foreach ($file in (Get-ChildItem -File)) {
    $file |
    Get-Member |
    Where-Object {$_.MemberType -eq "Method" -and $_.Definition -like "*system*" } |
    Select-Object -Property Name, MemberType
}) | Format-List

Конечно, я пытался без родителей, но в конечном итоге я думаю, что родители имеют смысл. Это похоже на $file in (Get-ChildItem -File), когда оно оценивает выражение в родительских элементах и ​​использует результат в качестве фактического объекта

Есть ли способ выполнить эту работу?

обратите внимание, чтоКод не должен достигать чего-либо (иначе), чем приводить пример механики

1 Ответ

2 голосов
/ 20 ноября 2019

foreach не имеет вывода, который вы можете захватить (кроме сахара, который вы нашли с помощью присваивания переменной), но вы можете собрать все возвращенные объекты, заключив его в подвыражение:

$(foreach ($file in Get-ChildItem -File) {
    # ...
}) | Format-List

Этот же шаблон можно использовать и для операторов if и switch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...