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

PowerShell脚本导出AD禁用用户组信息仅显示单条数据的解决求助

问题分析与解决方案:导出AD禁用用户组信息时CSV仅保留最后一条记录

问题根源

你遇到的CSV文件只保留最后一个用户数据的问题,本质是每次循环调用Export-Csv时,默认会覆盖已有文件内容。原脚本里的Export-Csv没有添加-Append参数,导致每处理一个用户就会替换掉之前的内容,最终只留下最后一条记录。

修改后的完整脚本

我们需要调整导出逻辑,添加-Append参数,同时还可以优化AD查询的效率(减少重复请求):

Import-Module ActiveDirectory

# 提前获取所有非Domain Users的组,避免循环内重复查询AD
$nonDomainUserGroups = Get-ADGroup -Filter {name -notlike "*domain users*"}

# 初始化CSV文件(确保表头只写入一次)
$csvPath = "C:\Users\Administrator\Desktop\grpsss.csv"
[PSCustomObject]@{
    samaccountname = ""
    givenname = ""
    surname = ""
    Groups = ""
} | Export-Csv -Path $csvPath -Delimiter ";" -NoTypeInformation

# 一次性获取目标OU中所有禁用用户的完整属性
$users = Get-ADUser -Filter 'enabled -eq $false' -SearchBase "OU=Lockdown,DC=home,DC=ac,DC=uk" -Properties samaccountname, memberof, givenname, surname

foreach ($user in $users) {
    # 获取用户所属的非Domain Users组名称
    $groupNames = (Get-ADPrincipalGroupMembership -Identity $user.SamAccountName | 
        Where-Object { $_.Name -notlike "*domain users*" } | 
        Select-Object -ExpandProperty Name) -join ','

    # 将组信息写入用户的info属性
    Set-ADUser $user.samaccountname -Replace @{info="Was a member of :- $groupNames"}

    # 追加用户信息到CSV文件
    [PSCustomObject]@{
        samaccountname = $user.samaccountname
        givenname = $user.givenname
        surname = $user.surname
        Groups = $groupNames
    } | Export-Csv -Path $csvPath -Delimiter ";" -Append -NoTypeInformation

    # 从非Domain Users组中移除当前用户
    Remove-ADGroupMember -Identity $nonDomainUserGroups -Members $user.samaccountname -Confirm:$False
}

$total = $users.Count
Write-Host "$total accounts have been processed..." -ForegroundColor Green

关键修改点说明

  1. 添加-Append参数:在Export-Csv中使用该参数,确保每次循环的用户数据是追加到CSV末尾,而不是覆盖原有内容。
  2. 提前查询组列表:把Get-ADGroup移到循环外,避免每次处理用户都重复查询AD,大幅提升脚本运行效率。
  3. 合并AD用户查询:一次性获取用户的givenname、surname等属性,减少重复调用Get-ADUser的次数。
  4. 初始化CSV表头:提前写入空对象生成表头,避免多次追加时重复生成表头(若不初始化,第一次Export-Csv也会自动生成表头,后续-Append不会重复写入,提前初始化更稳妥)。

额外注意事项

  • 确保运行脚本的账号拥有足够的AD权限(修改用户属性、移除组成员、读取AD数据)。
  • 建议先选取少量测试用户验证脚本行为,确认符合预期后再批量运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:02:51