2011-06-23 13 views
28

No he trabajado con un LDAP antes, así que estoy un poco perdido. Necesito conectarme a una fuente LDAP para encontrar un atributo específico y modificarlo. La entrada para el programa es un archivo CSV con una lista de usuarios. Se supone que el programa debe leer el UID del archivo CSV, encontrar el registro en el LDAP y reemplazar un determinado atributo. No tengo ni idea de cómo hacer esto. ¿Podría alguien señalarme en la dirección correcta, por favor?Consultando un LDAP

+1

Ya que mencionas que lea UID de un archivo CSV Me da la sensación de que no podría estar conectando a un repositorio LDAP Active Directory, ya que normalmente el atributo LDAP utiliza es ya sea cn, nombre, distinguishedname, objectGUID, objectsid, userprincipalname o samaccountname y no UID. Por lo tanto, se un poco más específico sobre a qué te estás conectando y qué estás cambiando. También díganos qué es la "ruta" o la raíz de búsqueda de LDAP a la que necesita conectarse. – CosmosKey

+1

Otro recurso si estás buscando usar LDS. ftp://ftp.ca.com/pub/ldap/docs/ldapv3/eTrust_LDAP_Server_Administrator_Guide_30.pdf – LinksTune

+2

El siguiente artículo podría ser útil: [Usando .NET C# LDAP Library] (http://www.novell.com/coolsolutions/ característica/11204.html). –

Respuesta

13

code wise es mucho más simple de lo que crees. Debe crear una conexión al directorio, configurar un buscador, luego buscar por nombre de propiedad.

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

sType es el tipo de nombre, y el nombre es el nombre real del usuario

+0

Cuando las pruebas unitarias son una preocupación, burlarse de DirectorySearcher es problemático. –

20

primer elemento de respuesta, mediante ADSI (chapado a la antigua)

How to do Almost everything (with ADSI) on Active Directory with C#

segundo elemento de respuesta, comenzando .NET 3.5 Microsoft introduce 'Principal' y 'AccountManagement '.

How to do Almost everything (with AccountManagement) on Active Directory with C#

tercer elemento de la respuesta, se puede utilizar bajo nivel (LDAP nativo) protocolo con System.DirectoryServices.Protocols (S.DS.P).

Observación: Si usted está interesado en la forma de interrogar directorio activo de código nativo, puede echar un vistazo a LDAP C API vinculante según lo descrito en el RFC 1823 especifica, Microsoft admite, ver MS Strategy for Lightweight Directory Access Protocol (LDAP). Encontrará los manuales de uso y referencia del Microsoft API in Lightweight Directory Access Protocol.

16

@KenL Almost me consiguió allí. También tuve que configurar AuthenticationType del DirectoryEntry para que funcione. Además, preste atención a cómo está usando comodines (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); 
} 
+0

Excelentes cosas, esto me puso en funcionamiento muy rápido. FYI: use constructores alternativos para que la clase DirectoryEntry se enlace si no puede buscar de forma anónima – sweetlilmre

+0

Searchstring no está definido, pero además de eso, su código era copy-paste :) – sonstabo