powershell - 如何在Powershell中通过管道传递来自foreach的输出

标签 powershell

我正在尝试将foreach循环的输出通过管道传递给format命令,但是它不起作用。我认为可能的原因是因为这可行。

$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

当然,我在没有 parent 的情况下尝试过,但最终我认为,如果有的话, parent 是有道理的。就像$file in (Get-ChildItem -File)一样,它在 parent 中评估表达式并将结果用作实际对象

有没有办法使这项工作?

请注意,除了给出示例机制之外,该代码不应实现任何其他目的

最佳答案

foreach没有可以捕获的输出(除了通过变量赋值找到的糖之外),但是您可以通过将其包装在子表达式中来收集所有返回的对象:

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

同样的模式也可以用于ifswitch语句。

关于powershell - 如何在Powershell中通过管道传递来自foreach的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960753/

相关文章:

powershell - 在 PowerShell 中使用 YQ 时出现引用问题

Powershell 3克隆一个对象有意外的结果 - 影响其他对象

java - 使用 Powershell 时出现 JDWP 语法错误

xml - 循环遍历节点并更改树结构xml

powershell - 如何使用 VSCode 中的 -OutPut 详细信息快速运行 Pester?

powershell - SCCM-使用PowerShell更改现有部署截止日期

shell - 使用 azure 时,powershell 脚本中的 ' 是什么意思?

regex - PowerShell正则表达式以验证大写主机名

powershell - 术语 'appcmd' 未被识别为 cmdlet 的名称

windows - 将 PowerShell 用于 Visual Studio 命令提示符