jueves, 31 de mayo de 2012

Consultar LDAP usando ADODB

Hoy toca hablar de como consultar el LDAP de una organización.

Este método que presento es uno que sirve cuando tengan problemas con el método de .NET para consultar el Directorio Activo, por lo cual es mejor no romperse la cabeza y usar ADODB.

Lo primero es crear un proyecto en VB y luego agregar una referencia a adodb.dll que aparece en la pestaña de .NET.

Ya hecho esto, lo siguiente será crear la consulta, la cual será de la siguiente forma:

1 - Importamos al formulario, clase o donde lo necesiten el espacio de nombre:

Imports ADODB

2 - Ahora debemos crear los objetos que vamos a utilizar, yo los he creado de la siguiente forma:

Dim cnx As New ADODB.Connection
Dim cmd As New ADODB.Command

3 - Como siguiente paso, debemos asignar el proveedor que usaremos para realizar la búsqueda, tal como se muestra a continuación:

cnx.Provider = "ADSDSOObject"
cnx.Open("Active Directory Provider")

4 - Como ultimo paso debemos realizar la consulta, este punto es muy interesante, ya que usamos una consulta muy parecida a sql y se debe escribir de la siguiente forma:

cmd.ActiveConnection = cnx
cmd.CommandText = "select " + _
" givenname, " + _
" sn " + _
"from 'LDAP://IP[:PORT]/ [dc=NAME], [ou=NAME], [o=NAME]' " + _
"where sn='TEXTO DE BUSQUEDA' "

NOTA: Como pueden ver podríamos buscar en un dominio incluyendo el nombre de éste, pero si sabemos sobre que grupo y carpeta buscar, nos vale solo con definir OU y O.

5 - Bueno a continuación nos queda solo preguntar por la información, agregando un parametro que limita el máximo de registro que se desea obtener, de la siguiente forma:

cmd.Properties("Page Size").Value = 1000
cmd.Properties("Searchscope").Value = 2

6 - Ahora debemos leer la información, para ello utilizaremos el viejo pero nunca olvidado recorset, que a pesar de que pasa el tiempo, todavía nos ayuda a solucionar infinidad de cosas

Dim oRd As ADODB.Recordset = oCmd.Execute()

If Not oRd.EOF Then
oRd.MoveFirst()

Do Until oRd.EOF
' para leer la información del registro deben hacer un truquito porque
' el objeto devuelve un array,

dim a as string = DirectCast(DirectCast(oRd.Fields("uid"), _
ADODB.Field).Value, System.Object())(0)


loop
End if



NOTA: Bueno amigos a probar, a mi me funciona de PM, si no les va hablen con su Administrador, porque puede ser que tengan problemas de permiso o que no les han pasado correctamente la dirección donde se encuentra el LDAP

No hay comentarios: