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

求实现多AD组重复成员识别与移除的PowerShell脚本

完善后的AD组重复成员清理脚本

需求回顾

  1. 获取指定6个AD组的所有成员(含递归嵌套组)
  2. 筛选出同时属于3个及以上目标组的用户
  3. 将这些用户从他们所属的目标AD组中移除

原脚本问题分析

原脚本仅提取了用户的Mail属性,缺少用户的唯一标识(如SamAccountName或DistinguishedName),也未记录用户具体属于哪些目标组,导致无法执行移除操作。

完整实现脚本

# 定义需要处理的6个AD组名称
$targetGroups = @("AD-Group1", "AD-Group2", "AD-Group3", "AD-Group4", "AD-Group5", "AD-Group6")

# 存储所有成员及其所属组的信息
$allMembersWithGroups = @()

# 遍历每个目标组,获取成员并记录所属组
foreach ($group in $targetGroups) {
    $groupMembers = Get-ADGroupMember -Identity $group -Recursive | Where-Object { $_.objectClass -eq 'user' } | Get-ADUser -Properties Mail
    foreach ($member in $groupMembers) {
        $allMembersWithGroups += [PSCustomObject]@{
            SamAccountName = $member.SamAccountName
            Mail           = $member.Mail
            UserDN         = $member.DistinguishedName
            GroupName      = $group
        }
    }
}

# 统计每个用户出现的次数,筛选出属于≥3个组的用户
$usersToRemove = $allMembersWithGroups | Group-Object -Property SamAccountName | Where-Object { $_.Count -ge 3 }

# 遍历需要移除的用户,从他们所属的目标组中移除
foreach ($userGroup in $usersToRemove) {
    $user = $userGroup.Group[0]
    Write-Host "处理用户: $($user.Mail) ($($user.SamAccountName)),所属目标组数量: $($userGroup.Count)"
    
    # 获取该用户所属的所有目标组
    $userGroups = $userGroup.Group | Select-Object -ExpandProperty GroupName -Unique
    
    foreach ($group in $userGroups) {
        try {
            # 执行移除操作,测试阶段可添加 -WhatIf 参数验证操作
            Remove-ADGroupMember -Identity $group -Members $user.UserDN -Confirm:$false -ErrorAction Stop
            Write-Host "成功从组 $group 移除用户 $($user.SamAccountName)"
        }
        catch {
            Write-Warning "移除用户 $($user.SamAccountName) 到组 $group 失败: $_"
        }
    }
}

关键说明

  1. 批量处理组:用数组$targetGroups存储组名,避免重复代码,后续修改组名更方便
  2. 保留关键属性:记录用户的SamAccountName、DistinguishedName(用于AD操作的唯一标识)和所属组名
  3. 安全操作:
    • 添加错误捕获,避免单个操作失败导致整个脚本中断
    • 测试阶段可在Remove-ADGroupMember后添加-WhatIf参数,预览即将执行的操作而不实际修改
  4. 去重处理:通过Select-Object -Unique避免重复移除同一用户的同一组

注意事项

  • 执行脚本需要AD组管理权限
  • 建议先在测试环境验证脚本逻辑,避免误删
  • 可添加日志输出,将操作记录保存到文件(如Out-File -Path "ADGroupCleanup.log" -Append)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:01:20