繁体   English   中英

如何从 foreach 到 powershell

[英]How to pipe output from foreach, in powershell

我正在尝试将 pipe 和 output 从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

如果我可以将整个 output 分配给一个变量,并将 pipe 变量分配给另一个命令,为什么以下不起作用?

(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)它在其中评估父项中的表达式并将结果用作实际的 object

有没有办法使这项工作?

请注意,代码不应该实现任何东西(其他),而不是给出一个机制的例子

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

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

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

这是另一种方法,无需等待整个 foreach 完成。 这就像在运行中定义 function :

& { 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

顺便说一句, $( )可以在任何地方 go ( )可以在 go 中,但它可以包含多个语句,用换行符或分号分隔。

另外,您可以直接 pipe 它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM