Mitglieder einer Active Directory-Gruppe rekursiv abrufen, d. H. Untergruppen einschließen

Gegeben eine Gruppe wie folgt in Active Directory:

MainGroup
  GroupA
    User1
    User2
  GroupB
    User3
  User4

Ich kann leicht feststellen, ob Benutzer3 Mitglied der Hauptgruppe oder einer ihrer Untergruppen ist. Der Code lautet wie folgt:

using System;
using System.DirectoryServices;

static class Program {
    static void Main() {
        DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
        string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y");
        DirectorySearcher searcher = new DirectorySearcher(user, filter);
        searcher.SearchScope = SearchScope.Subtree;
        var r = searcher.FindOne();
        bool isMember = (r != null);
    }
}

Ich möchte wissen, ob es einen ähnlichen Weg gibt, um alle Benutzer, die Mitglied einer Gruppe oder einer ihrer Untergruppen sind, abzurufen, d. H. Im Beispiel für MainGroup Benutzer1, Benutzer2, Benutzer3 und Benutzer4.

ie naheliegende Möglichkeit, alle Benutzer zu erreichen, besteht darin, jede Untergruppe rekursiv abzufragen, aber ich habe mich gefragt, ob es einen einfacheren Weg gib

Verwenden Sie den gleichen Ansatz mit demmemberOf:1.2.840.113556.1.4.1941: filter, aber die Verwendung des Domänenstamms anstelle des Benutzers als Suchbasis ist nicht möglich, da die Abfrage zu lange dauert (wahrscheinlich werden alle Gruppenmitgliedschaften rekursiv für alle Benutzer in der Domäne berechnet und geprüft, ob sie Mitglieder der angegebenen Gruppe sind Gruppe)

Welche Methode eignet sich am besten, um alle Mitglieder einer Gruppe, einschließlich ihrer Untergruppen, zu ermitteln?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage