如何编写PowerShell脚本统计多个AD组去重后符合条件的用户总数
PowerShell AD组跨组去重统计用户脚本
原有单组统计脚本仅能实现组内去重,无法过滤跨组重复的用户,导致最终计数偏高,以下脚本可实现4个AD组全局去重统计,保留指定属性筛选条件。
完整脚本
# 定义目标AD组列表 $adGroups = @("group1", "group2", "group3", "group4") # 初始化哈希表实现全局去重,利用键的唯一性自动排除重复用户 $userSet = @{} foreach ($group in $adGroups) { # 获取当前组的所有成员 $groupInfo = Get-ADGroup -Identity $group -Properties Members foreach ($member in $groupInfo.Members) { try { # 获取用户对象并加载extensionAttribute4属性 $adUser = Get-ADUser -Identity $member -Properties extensionAttribute4 # 匹配属性筛选条件 if ($adUser.extensionAttribute4 -eq "o365_facstaff") { # 以用户SamAccountName作为唯一标识,不存在则加入集合 if (-not $userSet.ContainsKey($adUser.SamAccountName)) { $userSet[$adUser.SamAccountName] = $adUser } } } catch { # 跳过组内非用户类型的成员(如嵌套组、计算机账户等) continue } } } # 输出最终统计结果 Write-Host "符合条件的去重用户总数:$($userSet.Count)"
逻辑说明
- 提前把4个目标AD组存入数组批量处理,减少冗余代码
- 使用哈希表做全局去重,只要用户在任意组出现过就不会被重复计数,彻底解决跨组重复统计的问题
- 保留
extensionAttribute4等于o365_facstaff的筛选规则,仅统计符合要求的用户 - 新增异常处理逻辑,跳过组内嵌套的非用户对象,避免脚本运行报错
内容的提问来源于stack exchange,提问作者Programmetry
相关产品推荐
相关产品推荐

