当管道对象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
}
}
但使用foreach
和if
似乎有点矫枉过正。当没有信息被传送到它时,是不是有一种更简单的方法可以不用空文件? Export-Csv
创建一个文件,即使它没有收到任何内容,这似乎很奇怪..
答案 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