Benutzerinformationen aus Active Directory in C# abfragen
-
Verwenden Sie den Namespace
System.DirectoryServices
in C#, um Benutzerinformationen aus Active Directory abzufragen -
Verwenden Sie den Namensraum
System.DirectoryServices.AccountManagement
in C#, um Benutzerinformationen aus Active Directory abzufragen -
Kombinieren Sie
System.DirectoryServices
undSystem.DirectoryServices.AccountManagement
, um auf Eigenschaften zuzugreifen, die nicht von denAccountManagement
-Bibliotheken bereitgestellt werden
Das Abrufen der Benutzerinformationen aus Active Directory kann schwierig sein, da einige der Befehlszeilen- und MSAD-Tools sehr einschränkend und schwierig zu verwenden sind. Andererseits ist das Schreiben Ihres C#-Codes lohnender und anpassbarer.
Es gibt zwei Sätze von Klassen für AD-Operationen zum Abfragen von Informationen in C#. Der erste verwendet den Namensraum System.DirectoryServices
und ist einfacher zu verwenden.
Es ist jedoch nicht so vielseitig wie das zweite mit dem Namensraum System.DirectoryServices.AccountManagement
.
Verwenden Sie den Namespace System.DirectoryServices
in C#, um Benutzerinformationen aus Active Directory abzufragen
System.DirectoryServices
ist eine technische Möglichkeit, Ihnen den Zugriff auf beliebige Benutzerinformationen aus Active Directory zu ermöglichen. Die Eigenschaften von AD
-Objekten (da sie alle generische Objekte sind) werden in einem Array gehalten, das alle Benutzerinformationen enthält.
Diese Methode ist deutlich kryptischer und detailorientierter. Häufig müssen UAC
-Codes von Entwicklern manuell festgelegt werden, um die Benutzerinformationen aus Active Directory abzufragen.
Der folgende ausführbare Code zeigt Ihnen, wie Sie Active Directory verwenden, um Benutzerinformationen in C# abzufragen.
using System;
using System.Text;
using System.DirectoryServices;
namespace queryInfoAD {
class userActiveDirectory {
static void Main(string[] args) {
// Input the user name (password can also be required) to get a particular user info from
// Active Directory
Console.Write("User Name = ");
String searchUsername = Console.ReadLine();
try {
// create an LDAP connection object that will help you fetch the Active Directory user
DirectoryEntry userLdapConn = createDirectoryEntry();
// create `ObjSearch` as a search object which operates on an LDAP connection object to only
// find a single user's details
DirectorySearcher ObjSearch = new DirectorySearcher(userLdapConn);
ObjSearch.Filter = searchUsername;
// create result objects from the search object
SearchResult checkUser = ObjSearch.FindOne();
if (checkUser != null) {
ResultPropertyCollection fields = checkUser.Properties;
foreach (String ldapUser in fields.PropertyNames) {
foreach (Object InfoChart in fields[ldapUser])
Console.WriteLine(String.Format("{0,-20} : {1}", ldapUser, InfoChart.ToString()));
}
}
else {
Console.WriteLine("User does not exist!");
}
}
catch (Exception e) {
Console.WriteLine("Error!\n\n" + e.ToString());
}
}
static DirectoryEntry createDirectoryEntry() {
// create an LDAP connection with custom settings and return it
DirectoryEntry ldapConnection = new DirectoryEntry("Insert connection domain link...");
ldapConnection.Path =
"Insert the path to the Active Directory which contains user information";
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
return ldapConnection;
}
}
}
System.DirectoryServices
bietet einfachen Zugriff auf das Active Directory aus verwaltetem Code. Das Objekt Suche
von DirectorySearcher
hilft, die Suche auf nur einen Benutzer mit einem gemeinsamen Benutzernamen einzugrenzen.
Sie können Ihre LDAP-Abfrage weiter eingrenzen, indem Sie eine dSearcher.Filter
-Methode einführen, die einen bestimmten Benutzer nach interessanten Informationen durchsuchen kann. Vergessen Sie außerdem nicht, die Objekte DirectoryEntry
und DirectorySearcher
zu entsorgen, da sie zum Namensraum System.DirectoryServices
gehören.
Verwenden Sie den Namensraum System.DirectoryServices.AccountManagement
in C#, um Benutzerinformationen aus Active Directory abzufragen
Sein Hauptzweck besteht darin, das Active Directory über .NET viel einfacher zu verwalten. Es ist der neuere Ansatz zum Abrufen von Benutzerinformationen aus dem Active Directory und kann so ziemlich jeden AD-Vorgang ausführen.
Diese Methode ermöglicht es den Entwicklern, Befehle wie user.DisplayName
und user.VoiceTelephoneNumber
zu verwenden, die dabei helfen, einen benutzerdefinierten Satz von Benutzerinformationen aus Active Directory abzufragen.
using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
// add the reference in the `System.DirectoryServices.AccountManagement` library to your project
// before executing this code
namespace DSAM_examp {
class AccManagement {
static void Main(string[] args) {
try {
// enter Active Directory settings
PrincipalContext ActiveDirectoryUser =
new PrincipalContext(ContextType.Domain, "Insert the domain link here...");
// create search user and add criteria
Console.Write("Enter User Name: ");
UserPrincipal userName = new UserPrincipal(ActiveDirectoryUser);
userName.SamAccountName = Console.ReadLine();
PrincipalSearcher search = new PrincipalSearcher(userName);
foreach (UserPrincipal result in search.FindAll())
// the user information in AD contains the VoiceTelephoneNumber that is unique and helps
// find the target user
// result.VoiceTelephoneNumber != null is also valid
if (result.DisplayName != null) {
// to display the user name and telephone number from Active Directory. You can also
// retrieve more information using similar commands.
Console.WriteLine(result.DisplayName, result.VoiceTelephoneNumber);
}
search.Dispose();
}
catch (Exception error) {
Console.WriteLine("User not found! Error: " + error.Message);
}
}
}
}
Sie können UserPrincipal.FindByIdentity
als Klasse des Namensraums System.DirectoryServices.AccountManagement
verwenden, was der einfachste Weg ist, Benutzerinformationen abzufragen, aber auch der langsamste.
Durch das Entfernen der Methode SamAccountName
und der manuellen Eingabe des Benutzernamens können Sie die Informationen aller Benutzer im Active Directory abfragen.
Kombinieren Sie System.DirectoryServices
und System.DirectoryServices.AccountManagement
, um auf Eigenschaften zuzugreifen, die nicht von den AccountManagement
-Bibliotheken bereitgestellt werden
Auf Eigenschaften, die die AccountManagement
-Bibliotheken nicht verfügbar machen, kann zugegriffen werden, indem UserPrincipal
in ein allgemeineres Objekt umgewandelt wird.
Beim Abrufen von zugrunde liegenden Objekten aus dem UserPrincipal
im Active Directory spielen beide DirectoryServices
-Namespaces eine wichtige Rolle.
using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
namespace HybridMethod {
class getUserInfo {
static void Main(string[] args) {
try {
PrincipalContext userActiveDirectory =
new PrincipalContext(ContextType.Domain, "Insert your domain link here...");
// `UserPrincipal` class encapsulates principals that contain user information
UserPrincipal userName = new UserPrincipal(userActiveDirectory);
// retrieves the principal context that is essential to perform the query. Its context
// specifies the server/domain against which search operations are performed.
PrincipalSearcher searchObj = new PrincipalSearcher(userName);
foreach (UserPrincipal result in searchObj.FindAll()) {
if (result.DisplayName != null) {
// access the underlying object, e.g., user properties
DirectoryEntry lowerLdap = (DirectoryEntry)result.GetUnderlyingObject();
Console.WriteLine("{0,30} {1} {2}", result.DisplayName,
lowerLdap.Properties["postofficebox"][0].ToString());
}
}
// disposing the `PrincipalSearcher` object
searchObj.Dispose();
}
catch (Exception exp) {
Console.WriteLine(exp.Message);
}
}
}
}
In diesem Tutorial haben Sie drei Möglichkeiten kennengelernt, die Benutzerinformationen aus Active Directory in C# abzufragen. Mit der dritten Hybridmethode können Sie sogar undurchsichtige Benutzereigenschaften erhalten.
Diese Methoden bieten Ihnen mehrere Vorteile wie Lesbarkeit und Kürze und sind äußerst nützlich, um alle oder einen Teil der Benutzerinformationen schneller und einfacher aus Active Directory abzurufen.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub