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 so CN=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 verwenden System.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.
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
foreach (var result in searcher.FindAll())
{
DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
Console.WriteLine("SAM account name : " + de.Properties["samAccountName"].Value);
Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
Console.WriteLine();
}
}
}
Console.ReadLine();
Beachten Sie, dass das AD-Benutzerobjekt eine Reihe von Attributen enthält. Insbesondere givenName
wird Ihnen das geben First Name
und sn
wird Ihnen das geben Last Name
. Über den Benutzernamen. Ich denke, Sie meinten den Benutzernamen. Beachten Sie, dass das AD-Benutzerobjekt zwei Anmeldenamen enthält. Eine davon ist samAccountName
, die auch als Anmeldename vor Windows 2000 bezeichnet wird. userPrincipalName
wird in der Regel nach Windows 2000 verwendet.