Get-ADGroupMember:超出了此请求的大小限制

Bnd*_*706 4 powershell active-directory

我试图从一个文本文件中拉出组,我的一个组太大,80,000人.

我如何让它工作l,它输出我想要的方式.

$groups = Get-Content c:\temp\ADGroups.txt

foreach($group in $groups) {
    @(Get-ADGroup $group -Properties Member| Select-Object -ExpandProperty Member).Count
    Get-ADGroupMember -Identity $group |
        Get-ADObject -Properties Name, DisplayName |
        Select-Object -Property @{n="Username";e={$_.Name}}, DisplayName,
            @{n="AD Group";e={$group}} |
        Export-Csv C:\Users\Desktop\GroupsInfo.CSV -NoTypeInformation -Append
}
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 12

Get-ADGroupMember可以返回的对象数受ADWS(Active Directory Web服务)中的限制的限制:

MaxGroupOrMemberEntries

5000

指定组成员(递归或非递归),组成员资格和授权组可以由Active Directory模块中检索的最大数量Get-ADGroupMember,Get-ADPrincipalGroupMembershipGet-ADAccountAuthorizationGroup小命令.如果您预计这些cmdlet会在您的环境中返回超过5000个结果,请将此参数设置为更高的值.

根据这个线程,你应该能够通过查询组对象和扩展它们的member属性来解决它(如果你不能增加服务的限制):

Get-ADGroup $group -Properties Member |
    Select-Object -Expand Member |
    Get-ADUser -Property Name, DisplayName
Run Code Online (Sandbox Code Playgroud)

但请注意,这可能会很慢,因为您将发送数千个请求.为所有用户构建哈希表可能更好:

$users = @{}
Get-ADUser -Filter '*' -Property Name, DisplayName | ForEach-Object {
    $users[$_.DistinguishedName] = $_
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以通过他们的名字来查找它们:

Get-ADGroup $group -Properties Member |
    Select-Object -Expand Member |
    ForEach-Object { $users[$_] }
Run Code Online (Sandbox Code Playgroud)


小智 8

我用 Get-ADGroupMember 达到了 5000 的限制。

您可以使用带有 -LDAPFilter 参数的 Get-ADUser 来获取组成员。它很快并且支持> 5000 个条目。

$groups = @(
    "group1"
    "group2"
    "group3"
)

Foreach ($group in $groups) {
    Get-ADUser -LDAPFilter "(&(objectCategory=user)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))" | Export-Csv "C:\$group.csv"
}
Run Code Online (Sandbox Code Playgroud)

看起来您可以使用此方法构建复杂的过滤器。我需要从一些非常大的群体中快速返回启用的成员。我为此使用的过滤器是:

"(&(objectCategory=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))"


Sid*_*Sid 6

我听说这是实际服务于 powershell cmdlet 请求的 AD Webservices 的限制。最大大小为 5000。但是您可以尝试 dsget 命令,尽管您需要一点创意。

$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedName将为您提供该组的 DN。

像这样使用DSget

$members = DSget group $GroupDN -members这将为您提供所有成员的 DN 列表。

将其提供给Get-ADUser管道或foreach循环中的 cmdlet,然后就可以开始了。

  • 当我尝试此操作时,DSget 抛出“无法识别”错误。我需要转到 Windows“程序和功能”并启用 DS Tools。该开关隐藏在 2016 服务器“添加角色...向导”的 **功能** 选项卡中。路径为“远程服务器管理工​​具/角色管理工具/AD DS 和 AD LDS 工具/AD DS 工具”。我没有更改任何角色,只是单击直到到达向导的 **选择功能** 页面。 (3认同)