Interroger un LDAP

Je n’ai jamais travaillé avec un LDAP auparavant, alors je suis un peu perdu. Je dois me connecter à une source LDAP pour rechercher un atsortingbut spécifique et le modifier. L’entrée pour le programme est un fichier CSV avec une liste d’utilisateurs. Le programme est censé lire l’UID du fichier CSV, rechercher l’enregistrement dans le LDAP et remplacer un certain atsortingbut. Je ne sais pas comment faire ça. Quelqu’un pourrait-il me diriger dans la bonne direction s’il vous plaît?

Premier élément de réponse , utilisant ADSI (à l’ancienne)

Comment faire presque tout (avec ADSI) sur Active Directory en C #

Deuxième élément de la réponse , en commençant .NET 3.5 Microsoft introduit « Principal » et « AccountManagement ».

Comment faire presque tout (avec AccountManagement) sur Active Directory en C #

Troisième élément de réponse , vous pouvez utiliser le protocole de bas niveau (LDAP natif) avec System.DirectoryServices.Protocols (S.DS.P) .

Remarque : Si vous souhaitez interroger Active Directory à partir du code natif, consultez l’API LDAP C-Binding décrite dans la RFC 1823, que Microsoft prend en charge, reportez-vous à la section Stratégie LDAP (Light Strategy Directory Protocol) de MS . Vous trouverez les manuels d’utilisation et de référence de l’ API Microsoft dans le protocole Lightweight Directory Access Protocol .

@ KenL m’a presque eu là-bas. Je devais également définir AuthenticationType de DirectoryEntry pour que cela fonctionne. Faites également attention à la manière dont vous utilisez les caractères génériques ( Kleene Stars ).

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://some.ldap.server.com"); rootEntry.AuthenticationType = AuthenticationTypes.None; //Or whatever it need be DirectorySearcher searcher = new DirectorySearcher(rootEntry); var queryFormat = "(&(objectClass=user)(objectCategory=person)(|(SAMAccountName=*{0}*)(cn=*{0}*)(gn=*{0}*)(sn=*{0}*)(email=*{0}*)))"; searcher.Filter = ssortingng.Format(queryFormat, searchSsortingng); foreach(SearchResult result in searcher.FindAll()) { Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : ssortingng.Empty); Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : ssortingng.Empty); } 

En termes de code, il est beaucoup plus simple que vous ne le pensez. Vous devez créer une connexion à l’annuaire, configurer un chercheur, puis rechercher par nom de propriété.

 DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com"); DirectorySearcher dSearch = new DirectorySearcher(entry); dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))"; 

SType est le type de nom et Nom est le nom d’utilisateur réel.