我正在尝试将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
同样的模式也可以用于
if
和switch
语句。
关于powershell - 如何在Powershell中通过管道传递来自foreach的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960753/