不允许使用空管道元素

时间:2017-01-08 09:20:08

标签: powershell

我了解如何在使用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

2 个答案:

答案 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-HostWrite-Host直接将输出发送到控制台,而不是管道。 Write-Ouput专为管道使用而设计。

希望有所帮助。