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

PowerShell从含samAccountName的文本导出AD用户属性至CSV仅存最后一条的问题

解决PowerShell导出AD用户到CSV仅保留最后一条记录的问题

问题原因

你的代码存在三个关键问题:

  1. 循环内重复覆盖文件:每次ForEach-Object循环调用Export-Csv时,默认会覆盖已有文件,最终只保留最后一次写入的用户数据。
  2. 变量引用错误:循环内使用未定义的$User变量,正确的当前对象引用应该是$_。
  3. 不必要的全属性获取:Properties *会加载AD用户的所有属性,既浪费资源又拖慢执行速度,只需指定需要的额外属性即可。

正确解决方案

方案一:先收集所有用户数据再统一导出(推荐)

这种方式效率更高,避免频繁的文件IO操作:

# 读取用户ID列表,批量获取所需AD用户属性,最后统一导出到CSV
$userList = Get-Content "C:\IDs.txt" | ForEach-Object {
    Get-ADUser -Identity $_ -Properties Description, Title | 
        Select-Object Name, SamAccountName, Description, Title, DistinguishedName, Enabled
}
$userList | Export-Csv "C:\UserInfo.csv" -NoTypeInformation

方案二:使用-Append参数追加写入

如果需要边获取边写入,可添加-Append参数,但需先清理已有文件避免重复表头:

# 先删除已有文件,防止重复写入表头
if (Test-Path "C:\UserInfo.csv") { Remove-Item "C:\UserInfo.csv" }

Get-Content "C:\IDs.txt" | ForEach-Object {
    Get-ADUser -Identity $_ -Properties Description, Title | 
        Select-Object Name, SamAccountName, Description, Title, DistinguishedName, Enabled |
        Export-Csv "C:\UserInfo.csv" -NoTypeInformation -Append
}

关键说明

  • 只指定需要的额外属性:Name、SamAccountName、DistinguishedName、Enabled是AD用户的默认属性,无需在-Properties中指定;Description和Title需要显式声明。
  • 循环内必须用$_引用当前处理的用户ID,否则会因变量未定义导致错误。

内容的提问来源于stack exchange,提问作者JCR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:26:28