Wie kann ich eine Liste der Benutzer aus Active Directory abrufen? Gibt es eine Möglichkeit, Benutzername, Vorname, Nachname abzurufen? Ich habe einen ähnlichen Beitrag gesehen, in dem dieser verwendet wurde:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Ich habe noch nie etwas mit Active Directory gemacht, daher bin ich völlig verloren. Jede Hilfe wäre sehr dankbar!
c#
asp.net
.net
active-directory
Mike
quelle
quelle
Antworten:
Wenn Sie mit Active Directory noch nicht vertraut sind, sollten Sie zunächst verstehen, wie Active Directory Daten speichert.
Active Directory ist eigentlich ein LDAP-Server. Auf dem LDAP-Server gespeicherte Objekte werden hierarchisch gespeichert. Es ist sehr ähnlich, wie Sie Ihre Dateien in Ihrem Dateisystem speichern. Deshalb erhielt es den Namen Directory Server und Active Directory
Die Container und Objekte in Active Directory können durch a angegeben werden
distinguished name
. Der definierte Name ist soCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Wie bei einer herkömmlichen relationalen Datenbank können Sie Abfragen für einen LDAP-Server ausführen. Es heißt LDAP-Abfrage.Es gibt verschiedene Möglichkeiten, eine LDAP-Abfrage in .NET auszuführen. Sie können DirectorySearcher von
System.DirectoryServices
oder SearchRequest von verwendenSystem.DirectoryServices.Protocol
.Für Ihre Frage ist es meiner Meinung nach am intuitivsten, PrincipalSearcher von zu verwenden, da Sie speziell nach dem Hauptobjekt des Benutzers suchen
System.DirectoryServices.AccountManagement
. Sie können leicht viele verschiedene Beispiele von Google finden. Hier ist ein Beispiel, das genau das tut, wonach Sie fragen.Beachten Sie, dass das AD-Benutzerobjekt eine Reihe von Attributen enthält. Insbesondere
givenName
wird Ihnen das gebenFirst Name
undsn
wird Ihnen das gebenLast Name
. Über den Benutzernamen. Ich denke, Sie meinten den Benutzernamen. Beachten Sie, dass das AD-Benutzerobjekt zwei Anmeldenamen enthält. Eine davon istsamAccountName
, die auch als Anmeldename vor Windows 2000 bezeichnet wird.userPrincipalName
wird in der Regel nach Windows 2000 verwendet.quelle
if (((UserPrincipal)result).EmailAddress != null)
bevor ich das Ergebnis zu meiner Liste hinzufügte.Wenn Sie Ihre aktiven Konten filtern möchten, fügen Sie dies zu Harveys Code hinzu:
nach dem ersten Gebrauch. Dann füge hinzu
vor dem alles finden. Und das sollte dir die aktiven bringen.
quelle
searcher.QueryFilter = userPrin;
da wir das Benutzerprinzipal bereits bei der Initialisierung an den Prinzipalsucher übergeben, aber ansonsten vielen Dank für den Tipp, nur aktive Benutzer zu filtern!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
if (userPrincipal.Enabled.HasValue)
Sicherlich geht der Kredit hier an @Harvey Kwok, aber ich wollte nur dieses Beispiel hinzufügen, weil ich in meinem Fall eine aktuelle Liste der UserPrincipals erhalten wollte. Es ist wahrscheinlich effizienter, diese Abfrage im Voraus zu filtern, aber in meiner kleinen Umgebung ist es einfacher, alles abzurufen und später nach Bedarf aus meiner Liste zu filtern.
Je nachdem, was Sie benötigen, müssen Sie möglicherweise nicht in DirectoryEntry umwandeln, aber einige Eigenschaften sind in UserPrincipal nicht verfügbar.
quelle
Fügen Sie die System.DirectoryServices.dll hinzu und verwenden Sie den folgenden Code:
quelle