3 Stimmen

Zählen Sie die Mitglieder von Active Directory-Gruppen (verschachtelt) einschließlich der Domänenbenutzer (Primärgruppe) auf.

Aktuell nutze ich die GetMembers-Methode der GroupPrincipal-Klasse (.NET 3.5) (mit true), um alle Mitglieder einer Gruppe (einschließlich verschachtelter Gruppen) aufzulisten.

Wenn in einer Untergruppe die primäre Domänengruppe (Domänenbenutzer) Mitglied ist, kann ich nicht alle Mitglieder korrekt aufzählen. Die erwähnte Methode zählt die Domänenbenutzergruppe nicht auf.

Ideen, um dieses Problem zu vermeiden? Ich brauche einen schnellen Algorithmus. Das Aufzählen jeder Gruppe/Untergruppe einzeln ist also keine gute Lösung.

0voto

Mash Punkte 1339

Ich verwende System.DirectoryServices, um LDAP-Abfragen zu senden.

Es ist schnell; Ich verwende es, um ~100k Benutzer abzufragen und es dauert ~20-30 Sekunden. (auf einer externen Domäne wäre es noch schneller, wenn ich mich auf der lokalen Domäne befände)

So mache ich es:

DirectoryEntry DE = new DirectoryEntry("LDAP://OU=ou_to_search_recursively", Benutzer, Passwort);
using (DirectorySearcher DSE = new DirectorySearcher(DE))
{
    DSE.PageSize = 1000;
    // nur Benutzer abrufen
    DSE.Filter = "(&(objectClass=user)(objectCategory=person))";
    // rekursiv suchen
    DSE.SearchScope = SearchScope.Subtree;
    // die gewünschten Eigenschaften laden
    DSE.PropertiesToLoad.Clear();
    DSE.PropertiesToLoad.Add("distinguishedName");
    DSE.PropertiesToLoad.Add("cn");
    DSE.PropertiesToLoad.Add("anderes_Attribut_das_Sie_möglicherweise_wollen");

    foreach (SearchResult u in DSE.FindAll())
    {
        // überprüfen, ob Eigenschaft vorhanden ist
        if (u.Properties.Contains("distinguishedName")) {
            // Eigenschaft zugreifen: 
            string dn = u.Properties["distinguishedName"][0].ToString();
        }
        //...
    }
}

Ich hoffe, es hat geholfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X