我了解如何在使用foreach
循环或使用Write-Output
代替Write-Host
时将其设为子表达式。但没有任何工作。我必须Export-Csv
以下输出。
foreach ($i in $a) {
Write-Host $i (Get-Mailbox -Database $i -ResultSize Unlimited).Count
} | Export-Csv "c\users\...\test.csv" -NoTypeInformation
或者,
$a | ForEach-Object {
Write-Host $_ (Get-Mailbox -Database $_ -ResultSize Unlimited).Count
} | Export-Csv "c\users\...\test.csv" -NoTypeInformation
答案 0 :(得分:4)
您看到错误" 不允许空管道"因为foreach ($x in $y)
语句不输出管道。当您需要使用管道输出时,请改用cmdlet版本$y | Foreach-Object
。
第二个问题是您的代码没有向管道输出任何内容。 Write-Host
将输出直接发送到控制台,忽略管道。要输出到管道,请使用Write-Output
,或者只是将对象用作语句,PowerShell将隐式调用Write-Output
。
您不希望在CSV文件中看到什么,但以下代码将使用PSCustomObject
输出包含两列的CSV。第一个是$a
的元素,第二个是get-mailbox
来电的计数。请注意,为了便于阅读,它分为多行。
$a | foreach-object {
[PSCustomObject]@{
first=$_
second=(get-mailbox -database $_ -resultsize unlimited).count
}
} | export-csv "c\users\...\test.csv" -notypeinformation
答案 1 :(得分:0)
使用Write-Output
代替Write-Host
。 Write-Host
直接将输出发送到控制台,而不是管道。 Write-Ouput
专为管道使用而设计。
希望有所帮助。