PowerShell中Where-Object配合Export-Csv导出CSV文件异常求助
问题:PowerShell导出CSV仅显示“”,移除过滤条件后恢复正常
我尝试使用以下PowerShell代码导出CSV文件,但打开生成的.csv文件时,仅显示“”。我认为这显然与编码和BOM有关,但无论尝试何种方法都无法解决。
$Date = (Get-Date).AddDays(-30) $searchroot = "Example OU" #GetADUsers Get-QADUser -SearchRoot $searchroot -Enabled -SizeLimit 0 | Select UserPrincipalName,whenCreated | Where-Object {$_.CreatedDateTime -ge $Date} | Export-Csv -Path 'ExamplePath.csv' -Delimiter ";" -Encoding UTF8
我尝试添加-NoTypeInformation、移除-Delimiter、更改编码,但都无效。如果移除Where-Object {$_.CreatedDateTime -ge $Date},导出就能正常工作。我可能忽略了某个明显的问题,恳请帮助!
解决方案
问题根本不是编码,而是过滤条件里的属性名错误:
- 你通过
Select只保留了UserPrincipalName和whenCreated两个属性 - 但
Where-Object里却用了CreatedDateTime这个不存在的属性,导致没有任何对象能通过过滤,最终导出的是空CSV文件 - UTF-8 BOM(就是你看到的“”)在空文件里会被单独显示出来,这才让你误以为是编码问题
修正后的代码:
$Date = (Get-Date).AddDays(-30) $searchroot = "Example OU" #GetADUsers Get-QADUser -SearchRoot $searchroot -Enabled -SizeLimit 0 | Where-Object {$_.whenCreated -ge $Date} | # 先过滤再选属性,更高效 Select UserPrincipalName,whenCreated | Export-Csv -Path 'ExamplePath.csv' -Delimiter ";" -Encoding UTF8 -NoTypeInformation
额外优化建议:
- 把
Where-Object放在Select前面,先过滤掉不需要的对象,再选择属性,能减少内存占用 - 添加
-NoTypeInformation可以避免CSV开头的类型注释行
内容的提问来源于stack exchange,提问作者Invertible
相关产品推荐
相关产品推荐

