You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:25:33