Interrogare un LDAP

Non ho mai lavorato con un LDAP, quindi sono un po ‘perso. Devo connettermi a una fonte LDAP trovare un attributo specifico e cambiarlo. L’input per il programma è un file CSV con un elenco di utenti. Il programma dovrebbe leggere l’UID dal file CSV trovare il record nel LDAP e sostituire un determinato attributo. Non ho idea di come farlo. Qualcuno potrebbe indicarmi la direzione giusta per favore?

Primo elemento di risposta , utilizzando ADSI (old fashion)

Come fare Quasi tutto (con ADSI) su Active Directory con C #

Secondo elemento di risposta , l’avvio di .NET 3.5 Microsoft introduce ” Principal ” e ” AccountManagement “.

Come fare Quasi tutto (con AccountManagement) su Active Directory con C #

Terzo elemento di risposta , è ansible utilizzare il protocollo di basso livello (nativo LDAP) con System.DirectoryServices.Protocols (S.DS.P) .

Nota : se sei interessato a come interrogare la directory triggers da codice nativo, potresti dare un’occhiata all’API C-B di LDAP come descritto in RFC 1823 specifica, Microsoft lo supporta, vedi MS Strategy per LDAP (Lightweight Directory Access Protocol) . Troverete i manuali di utilizzo e di riferimento dell’API di Microsoft in Lightweight Directory Access Protocol .

@KenL Mi ha quasi portato lì. Ho anche dovuto impostare il AuthenticationType di DirectoryEntry per farlo funzionare. Inoltre, fai attenzione a come stai usando i caratteri jolly ( 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 = string.Format(queryFormat, searchString); foreach(SearchResult result in searcher.FindAll()) { Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : string.Empty); Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : string.Empty); } 

in termini di codice è molto più semplice di quanto si pensi. È necessario creare una connessione alla directory, configurare un ricercatore, quindi cercare per nome della proprietà.

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

SType è il tipo di nome e Name è il nome utente effettivo