1. ホーム
  2. powershell

[解決済み] Get-ADGroupMember : このリクエストのサイズ制限を超えました。

2022-03-12 18:53:42

質問

テキストファイルからグループを取り込もうとしているのですが、グループの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
}

解決方法は?

というオブジェクトの数は Get-ADGroupMember の制限により、返せる値が制限されます。 ADWS (Active Directory Web Services)を利用しています。

<ブロッククオート

MaxGroupOrMemberEntries

5000

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

によると このスレッド グループオブジェクトにクエリを発行し、そのオブジェクトの member プロパティを設定する必要があります (サービスの制限を増やすことができない場合)。

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

ただし、何千ものリクエストを送信することになるので、遅くなる可能性が高いことに注意してください。全ユーザーのhashtableを作る方がいいかもしれません。

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

で、識別名で調べられるようにします。

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