PowerShell Export-CSV创建空文件

时间:2014-10-17 13:07:17

标签: file powershell csv

当管道对象Export-Csv时,Cmdlet始终创建文件,即使管道输出为空。这是正常行为吗?

代码:

'1' | where {$_ -ne '1'} | Export-Csv -Path $file -NoTypeInformation

我试图通过添加where{$_}来避免这种情况,但也创建了一个空文件:

'1' | where {$_ -ne '1'} | where {$_} | Export-Csv -Path $file -NoTypeInformation

解决方法是:

'1' | where {$_ -ne '1'} | Foreach {
    if ($_) {
        Export-Csv -Path $file -NoTypeInformation -Encoding UTF8 -Delimiter ';' -Append
    }
}

但使用foreachif似乎有点矫枉过正。当没有信息被传送到它时,是不是有一种更简单的方法可以不用空文件? Export-Csv创建一个文件,即使它没有收到任何内容,这似乎很奇怪..

2 个答案:

答案 0 :(得分:0)

好吧,如果您正在使用Export-CSV,您已经决定写入磁盘。 你自己的自定义过滤器怎么样?

$File = 'C:\ByteTheDisk.csv'
Filter MaybeExport-CSV {
   if ($_)
    {
      Export-CSV -InputObject $_ -Path $File -NoTypeInformation -Append -Verbose }
    }

'1' | where {$_ -ne '1'} | MaybeExport-CSV     # No file created
'2','1' | where {$_ -ne '1'} | MaybeExport-CSV # File created for '2'

答案 1 :(得分:0)

我认为这会对你有所帮助:

('1' | ?{$_ -ne '1'}) | Export-Csv -Path $file -NoTypeInformation

请注意额外的刹车。

您可能会发现需要添加Select-Object,因为我刚刚检查了csv的内容,它包含了对象属性而不是值:

('1' | ?{$_ -ne '1'}) | Select-Object @{Name='Value';Expression={$_}} | Export-Csv -Path $file -NoTypeInformation

这里创建一行文件:

(@('1','2') | ?{$_ -ne '1'}) | Select-Object @{Name='Value';Expression={$_}} | Export-Csv -Path $file -NoTypeInformation