直接用Get-ADGroupMember配合Measure-Object可快速统计组成员数,需注意嵌套组处理与权限问题:基础统计仅含直接成员,递归统计需加-Recursive和Where-Object筛选user类对象,避免计入嵌套组。
直接用 get-adgroupmember 配合 measure-object 就能快速统计,但要注意嵌套组和权限问题,否则容易漏数或报错。
基础统计:只查直接成员(不含嵌套)
适用于组内都是用户、且不需要展开子组的场景:
- 确保已加载 ActiveDirectory 模块:Import-Module ActiveDirectory
- 运行命令:Get-ADGroupMember "GroupName" | Measure-Object | Select-Object Count
- 若组名含空格或特殊字符,用引号包裹;也可用 -Identity 参数显式指定:Get-ADGroupMember -Identity "Domain Admins" | Measure-Object
递归统计:包含嵌套组中的所有用户
当目标组可能包含其他组(如“IT-Support”里加了“HelpDesk-Team”),需展开全部嵌套成员:
- 使用 -Recursive 参数:Get-ADGroupMember "GroupName" -Recursive | Where-Object ObjectClass -eq 'user' | Measure-Object
- 必须加 Where-Object ObjectClass -eq 'user',否则会把嵌套的组也计入总数
- 该操作对域控制器压力略大,超大嵌套结构(如上百层)可能超时,建议在非高峰时段执行
避免常见错误
实际运行中容易卡在这几个点:
- 权限不足:普通域用户默认不能读取某些高权限组(如 Domain Admins),需用域管理员账号运行 PowerShell
- 对象跨域未解析:若组含来自信任域的用户,-Recursive 可能失败,可加 -Server 指定全局编录服务器,或改用 Get-ADObject + LDAP 查询
- 结果为空不报错:组名拼错或不存在时,Get-ADGroupMember 默认静默返回空,建议先用 Get-ADGroup 验证组是否存在
一键封装成函数(可选)
方便重复使用,带简单错误处理和模式选择:
- 复制粘贴到 PowerShell 中即可调用:Count-ADGroupUsers "Sales-Team" -Recursive
- 函数示例(无需安装额外模块):
function Count-ADGroupUsers {
param($Name, [switch]$Recursive)
$params = @{Identity=$Name}
if ($Recursive) { $params.Recursive = $true }
try {
(Get-ADGroupMember @params | Where-Object ObjectClass -eq 'user').Count
} catch { Write-Error "无法获取组 '$Name': $($_.Exception.Message)" }
}










