查询所有AD组成员遇请求大小限制错误,求解决办法
AD组查询"大小限制超出"错误的解决办法
这个错误是因为Active Directory默认限制单个查询返回的对象数量(默认1000条),当目标组的成员数超过这个阈值时,Get-ADGroupMember就会触发该报错。以下是几种可行的解决方法:
方法1:最小化修改原代码
直接给Get-ADGroupMember添加-ResultSetSize $null参数,取消AD的查询大小限制,让命令返回所有成员:
$Groups = Get-ADGroup -Filter {GroupScope -eq 'Global' -and Members -ne "NULL"} $Users = foreach( $Group in $Groups ){ # 添加-ResultSetSize $null取消大小限制 Get-ADGroupMember -Identity $Group -ResultSetSize $null | foreach { [PSCustomObject]@{ Group = $Group.Name UserName = $_.SamAccountName } } } $Users | Export-CSV C:\scripts\groups.csv -NoTypeInformation
方法2:批量查询成员(更高效,适合超大组)
通过Get-ADGroup直接获取组的Members属性(成员的DN列表),再用Get-ADObject批量查询成员信息,这种方式更高效,也能绕过大小限制:
# 如需限定特定OU,添加-SearchBase参数,示例:-SearchBase "OU=你的目标OU,DC=domain,DC=com" $Groups = Get-ADGroup -Filter {GroupScope -eq 'Global'} -Properties Members $Users = foreach ($Group in $Groups) { # 跳过没有成员的组 if (-not $Group.Members) { continue } # 批量获取成员对象,-ResultSetSize $null取消大小限制 $members = Get-ADObject -Identity $Group.Members -ResultSetSize $null -Properties SamAccountName foreach ($member in $members) { [PSCustomObject]@{ Group = $Group.Name UserName = $member.SamAccountName # 可选:添加对象类型,区分用户、组、计算机 ObjectType = $member.ObjectClass } } } # 导出时指定UTF8编码,避免中文乱码 $Users | Export-CSV C:\scripts\groups.csv -NoTypeInformation -Encoding UTF8
注意事项
- 原代码中的
-Filter {Members -ne "NULL"}写法不够严谨,建议改为在循环内判断if (-not $Group.Members)跳过空成员组,避免漏判。 - 如果查询范围是整个域,建议加上
-SearchBase限定到目标OU,减少查询时间和资源占用。
内容的提问来源于stack exchange,提问作者heatwavewoo
相关产品推荐
相关产品推荐

