Hallo Community,
ich versuche derweil aus einem** AD Informationen** zu einem User auszulesen (Email Adresse, Vorname und Co.)
Dazu bin ich bisher wie folgt vorgegangen:
string filter = string.Format("(&(ObjectClass={0})(sAMAccountName={1}))", "person", "DerEntsprechendeUserName");
string domain = "DieADDomain";
System.DirectoryServices.DirectoryEntry adRoot = new System.DirectoryServices.DirectoryEntry("LDAP://" + domain, null, null, AuthenticationTypes.Secure);
System.DirectoryServices.DirectorySearcher searcher = new System.DirectoryServices.DirectorySearcher(adRoot);
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.Filter = filter;
SearchResult result = searcher.FindOne();
System.DirectoryServices.DirectoryEntry directoryEntry = result.GetDirectoryEntry();
string displayName = directoryEntry.Properties["displayName"][0].ToString();
string firstName = directoryEntry.Properties["givenName"][0].ToString();
string lastName = directoryEntry.Properties["sn"][0].ToString();
string email = directoryEntry.Properties["mail"][0].ToString();
Beim auslesen der Properties bekomme ich allerdings stets die folgende Exception:> Fehlermeldung:
COMException: Unbekannter Fehler (0x8000500c)
Beim Debuggen ist mir auch aufgefallen das ich für den directoryEntry keine Schema Informationen abrufen, ebenfalls eine Exception vom Typ 'System.Runtime.InteropServices.COMException' geworfen bekomme.
Hat von euch jemand Rat wie ich erfolgreich zu meinem Ziel gelange und die spezifischen Informationen zu einem spefifischen User aus dem Active Directory auslesen kann ?
Vielen Dank schonmal
Hallo Birne,
nur so eine Idee:
Eventuell hast du keine ausreichende Berechtigungen um die Daten auszulesen. Bei unserer Domain funktioniert der Code von dir soweit in einer Konsolenanwendung. (Copy & Paste)
Andere, elegantere Variante, sofern Rechte für das Lesen existieren:
PrincipalContext domainContext = new PrincipalContext( ContextType.Domain, "domain.name" );
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity( domainContext, IdentityType.SamAccountName, "samAccountName" );
string displayName = userPrincipal.DisplayName;
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Birne,
im Normalfall hängt der SharePoint-Server am ActiveDirectory. D.h. du solltest problemlos übers SharePoint-Objektmodell (Also Microsoft.SharePoint) Benutzerinformationen auslesen können. Aus meiner Sicht brauchst du da kein DirectoryEntry.