tobi1983
Goto Top

Größenlimit für eine Anforderung wurde überschritten

Hallo zusammen,

ich habe mir ein Script gebastelt was mir allerdings bei 12000 Gruppenmitgliedern in die Bremse geht und mir den Fehler ausgibt "Das größenlimit für diese anforderung wurde überschritten".

Hat jemand eine Idee wie man das ganze umgehen kann, ohne irgendwas am DC zu ändern?

Bin noch PS Anfänger und bin am verzweifeln, daher ein Hilferuf...

Hier mein Script:


$groupName = "Testgruppe"  
$domainController = "TESTDOMAIN"  

$group = Get-ADGroup -Identity $groupName -Server $domainController

if ($group -eq $null) {
    Write-Host "Die Sicherheitsgruppe '$groupName' wurde nicht gefunden."  
} else {
      $members = Get-ADGroupMember -Identity $group -Server $domainController
    
    foreach ($member in $members) {
        if ($member.ObjectClass -eq "user") {  
            $user = Get-ADUser -Identity $member -Server $domainController
            if (-not $user.Enabled) {
                Remove-ADGroupMember -Identity $group -Members $user -Server $domainController -Confirm:$false
                Write-Host "Der deaktivierte Benutzer $($user.Name) wurde aus der Sicherheitsgruppe entfernt."  
            }
        }
    }
    
    Write-Host "Alle deaktivierten Benutzer wurden erfolgreich aus der Sicherheitsgruppe entfernt."  
}

Content-Key: 63778753590

Url: https://administrator.de/contentid/63778753590

Printed on: May 3, 2024 at 19:05 o'clock

Member: Dani
Dani Apr 23, 2024 at 17:08:12 (UTC)
Goto Top
Member: Tobi1983
Tobi1983 Apr 23, 2024 at 18:24:29 (UTC)
Goto Top
Moin, mit der Methode schreibt er mir allerdings alle Member aus der Gruppe heraus.
Er soll mir nur die deaktiverten User aus der Gruppe entfernen und die aktiven Accounts als Member belassen.

Gibt es eine Methode mit der man in intervallen von 1000 Mitgliedern pro Runde oder so abfragt bis die Gruppe durchlaufen wurde ?

Hatte es auch schon mit "Pagesize" versucht aber hatte auch kein erfolg gebracht... face-sad
Member: schrick
schrick Apr 23, 2024, updated at Apr 24, 2024 at 08:02:31 (UTC)
Goto Top
Hi.
Immer besser direkt die Filter der Funktionen nutzen statt sich erst alle User zu holen und alle nacheinander einzeln durch zu ackern! Spart Unmengen an Zeit und Ressourcen bei der Menge an Mitgliedern.
$group = "CN=Testgruppe,CN=Users,DC=Domain,DC=de"  
$disabledUsersInGroup = Get-AdUser -LdapFilter "(&(memberof=$group)(userAccountControl:1.2.840.113556.1.4.803:=2))"  
if ($disabledUsersInGroup){
     Remove-ADGroupMember -Identity $group -Members $disabledUsersInGroup -Confirm:$false -verbose
}

Wenn du die LDAP Abfragesyntax nicht magst dann kannst du den Abfragefilter als Alternative auch über den normalen Filter definieren
$disabledUsersInGroup = Get-ADUser -Filter "enabled -eq 'false' -and memberof -eq '$group'"  

Gruß Schrick
Member: erikro
erikro Apr 24, 2024 at 07:36:53 (UTC)
Goto Top
Moin,

Zitat von @Tobi1983:
ich habe mir ein Script gebastelt was mir allerdings bei 12000 Gruppenmitgliedern in die Bremse geht und mir den Fehler ausgibt "Das größenlimit für diese anforderung wurde überschritten".

Merke: Hole immer nur die Daten, die Du auch brauchst! face-wink Du fragst erst alle User ab, um sie dann alle einzeln zu untersuchen. Das ist Unsinn. Filtere erst nach den Usern, die Du auch wirklich brauchst und schicke sie dann in die Schleife. Ansonsten ist die Aufgabe ein Einzeiler:

Get-ADGroupMember -identity gruppenname | ?{$_.objectclass -eq "user"} | get-aduser | ?{$_.enabled -eq $false} | %{Remove-ADGroupMember -Identity gruppenname -Members $_}  

Das kann man auch noch hübscher machen mit Fehlerbehandlung und Meldungen und evtl. eine for-each-Schleife statt for-EachObject. Aber das kriegst Du bestimmt hin. face-wink

Liebe Grüße

Erik