web-dev-qa-db-ja.com

Get-ADGroupMember:このリクエストのサイズ制限を超えました

テキストファイルからグループを取得しようとしていますが、グループの1つが大きすぎて、80,000人です。

これをどのように機能させるには、どうすればよいかが出力されます。

$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
}
5
Bnd10706

そのオブジェクトの数Get-ADGroupMember戻り値は [〜#〜] adws [〜#〜] (Active Directory Web Services)の制限によって制限されます:

MaxGroupOrMemberEntries

5000

Active Directoryモジュールで取得できるグループメンバー(再帰的または非再帰的)、グループメンバーシップ、および承認グループの最大数を指定しますGet-ADGroupMemberGet-ADPrincipalGroupMembershipGet-ADAccountAuthorizationGroupコマンドレット。これらのコマンドレットがご使用の環境で5000を超える結果を返すことが予想される場合は、このパラメーターをより高い値に設定してください。

this thread によると、グループオブジェクトにクエリを実行し、memberプロパティを展開することで回避できます(サービスの制限を増やすことができない場合)。

Get-ADGroup $group -Properties Member |
    Select-Object -Expand Member |
    Get-ADUser -Property Name, DisplayName

ただし、何千ものリクエストを送信することになるため、これは遅くなる可能性があることに注意してください。すべてのユーザーのハッシュテーブルを作成する方がよい場合があります。

$users = @{}
Get-ADUser -Filter '*' -Property Name, DisplayName | ForEach-Object {
    $users[$_.DistinguishedName] = $_
}

識別名で検索できるように:

Get-ADGroup $group -Properties Member |
    Select-Object -Expand Member |
    ForEach-Object { $users[$_] }
15
Ansgar Wiechers

Get-ADGroupMemberで5000の制限に達していました。

Get-ADUserを-LDAPFilterパラメーターと共に使用して、グループメンバーを取得できます。迅速で、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"
}
_

この方法で複雑なフィルターを作成できるようです。一部の非常に大規模なグループから有効なメンバーをすばやく返す必要がありました。これに使用したフィルターは次のとおりです。

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

4
usershmusername

これは、PowerShellコマンドレットからのリクエストを実際に処理するAD Webサービスの制限であると聞いています。最大サイズは5000です。少しクリエイティブを取得する必要がありますが、dsgetコマンドを試すことができます。

$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedNameは、グループのDNを提供します。

DSgetをこのように使用します。

$members = DSget group $GroupDN -membersこれにより、すべてのメンバーのDNのリストが表示されます。

それをGet-ADUserコマンドレットをパイプまたはforeachループで実行すると、問題ありません。

4
Sid