2017-09-06 1 views
1

Ich versuche, Gruppen aus einer Textdatei zu ziehen und eine meiner Gruppen ist zu groß, 80.000 Menschen.Get-ADGroupMember: Die maximale Größe für diese Anfrage wurde überschritten

Wie bekomme ich das zur Arbeit l, es gibt aus, wie ich es will.

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

Antwort

3

Die Anzahl der Objekte, die Get-ADGroupMember zurückkehren kann durch eine Grenze in den ADWS (Active Directory Web Services) beschränkt ist:

MaxGroupOrMemberEntries

Gibt die maximale Anzahl von Gruppenmitgliedern (rekursiv oder nicht-rekursiv), Gruppenmitgliedschaften und Autorisierungsgruppen, die vom Active Directory-Modul abgerufen werden können Get-ADGroupMember, Get-ADPrincipalGroupMembership und Get-ADAccountAuthorizationGroup Cmdlets. Setzen Sie diesen Parameter auf einen höheren Wert, wenn Sie davon ausgehen, dass diese Cmdlets mehr als 5000 Ergebnisse in Ihrer Umgebung zurückgeben.

Nach this thread sollten Sie durch Abfragen Gruppenobjekte um sie in der Lage zu arbeiten und ihre member Eigenschaft erweitern (wenn Sie nicht die Grenze für den Dienst erhöhen):

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

Vorsicht, obwohl , dass dies wahrscheinlich langsam ist, weil Sie Tausende von Anfragen senden werden. Es könnte besser sein, einen Hash-Tabelle aller Nutzer zu bauen:

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

, damit Sie sie auf ihren Distinguished Name aussehen:

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

Sie müssten den -resultpagesize Parameter verwenden. Der höchste Wert, den Sie angeben können, beträgt 2147483647 So:

Get-ADGroupMember -Identity $group -resultpagesize 2147483647 | 
    Select-Object -Property @{n="Username";e={$_.Name}}, DisplayName, 
     @{n="AD Group";e={$group}} | 
    Export-Csv C:\Users\Desktop\GroupsInfo.CSV -NoTypeInformation -Append 
0

Ich höre dies eine Einschränkung des AD-Webservices, die die Anforderungen von Powershell-Cmdlets Dienst tatsächlich. Die maximale Größe beträgt 5000. Sie können jedoch den Befehl dsget ausprobieren, obwohl Sie ein wenig Kreativität benötigen.

$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedName gibt Ihnen die DN der Gruppe.

Verwenden Sie die DSget wie folgt.

$members = DSget group $GroupDN -members Dies wird Ihnen die Liste der DNs aller Mitglieder geben.

Führen Sie das zu einem Get-ADUser Cmdlet in einem Rohr oder foreach Schleife und Sie sind gut zu gehen.

+0

Ich habe dies auf einer Gruppe von 5600 Benutzern getestet und gearbeitet. Ziemlich schnell auch. –

Verwandte Themen