【发布时间】:2017-10-06 12:44:59
【问题描述】:
为什么我不能将结果从一个 foreach-object 操作传递到另一个 foreach-object 操作?我无法运行最后一个 ForEach-Object 循环。它什么也不输出。
$mailboxstatistics |
Select-Object -First 20 |
Where { $_.FolderPath.Contains("/Inkorg") -eq $True } |
ForEach-Object -Begin{
Write-Host "Begin"
} -Process{
#Write-Host "Process"
Write-Host $($_.FolderPath)
} -End{
Write-Host "End"
} |
ForEach-Object{
Write-Host "test"
}
【问题讨论】:
-
Write-Host不是Write-Output。您通常都不使用(明确地),只需返回管道本身中的值(与Write-Output调用具有相同的效果)。 -
不要害怕破坏你的陈述。将变量设置为 First 20 where 的内容,然后将此变量通过管道传输到第一个 foreach,然后将其通过管道传输到下一个 foreach。不过,在您的情况下,我不明白您为什么不在第一个 foreach 中执行所有需要的操作。
-
似乎我在对象上使用了 Write-Host,($_.FolderPath) 是阻止循环传递对象的罪魁祸首。谢谢,不知道。如果我想在传递管道时打印一个对象属性值(不阻塞它),是否有一个像 debug.writeline() 一样的正确命令?
-
Write-Host没有阻塞任何东西——它根本不是管道的一部分。你的第二个ForEach没有做任何事情,因为没有对象传递给它。如果要打印值并在管道中传递它,请使用Write-Host除了产生管道输出(但最终结果无论如何都会在控制台结束,因此这可能会导致输出混乱)。 -
除了管道之外,还有
Tee-Object可以复制到变量或文件中(虽然它不能直接复制到主机输出)。
标签: powershell