Feedback

C# - ActiveDirectory - Benutzer einer Gruppe ermitteln

Veröffentlicht von am 12/8/2009
(3 Bewertungen)
Mit diesem Snippet können alle Benutzer ausgelesen werden, welche zu einer bestimmten Gruppe gehören. Jedoch bezieht sich diese "AD-Anfrage" nur auf die Domäne in der man selbst befindet.

Des weiteren sind noch folgende usings einzubinden:

using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
/// <summary>
///     Ermittelt alle Benutzer die einer Gruppe angehören.
/// </summary>
/// <param name="group">
///     Name der Gruppe für welche alle zugehörigen Mitglieder ermittelt werden sollen.
/// </param>
/// <returns>
///     eine Liste mit den Mitgliedernamen
/// </returns>
private List<string> GetMemberOfGroup(string group)
{
    List<string> members = new List<string>();
    // Objekt für AD-Abfrage erzeugen
    using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry(string.Empty)))
    {
        // nach Kriterium filtern - hier nach Gruppe mit einem best. Namen (Inhalt von 'group')
        searcher.Filter = string.Format(@"(&(objectClass=group)(cn={0}))", group);

        // Anfrage mit gesetzteen Filter ausführen und Ergebnisse durch iterieren
        foreach (SearchResult result in searcher.FindAll())
        {
            // Eigenschaft 'member' des AD-Knotenpunktes 'result' durch iterieren
            foreach (var member in result.Properties["member"])
            {
                // AD-Eintrag für Suchergebnis abrufen
                using (DirectoryEntry memberResult = new DirectoryEntry(string.Format("LDAP://{0}", member)))
                {
                    string username = null;

                    // wenn Fehler beim abrufen...
                    try
                    {
                        username = memberResult.Properties["sAMAccountName"].Value as string;
                    }
                    catch (Exception) //...dann von der Eigenschaft 'Path' die Erste CN nehmen
                    {
                        username = memberResult.Path.Substring(0, memberResult.Path.IndexOf(','))
                                                    .Replace("LDAP://CN=", string.Empty);
                    }

                    // wenn 'username' nicht 'null' dann zur Liste hinzufügen
                    if (username != null)
                        members.Add(username);
                }
            }
        }
    }

    // sollte nichts ermittelt worden sein, "- kein Eintrag gefunden -" in Liste einfügen
    if (members.Count < 1)
        members.Add("- kein Eintrag gefunden -");


    return members;
}

1 Kommentare zum Snippet

Keks1911 schrieb am 7/23/2010:
Die Exception sollte wohl "NotSupportedException" sein.
 

Logge dich ein, um hier zu kommentieren!