domingo, 26 de junio de 2011

Obtener datos del Active Directory

Muchas veces uno necesita extraer datos de determinados campos (o atributos) del Active Directory y plasmarlos en una planilla para poder trabajar con ellos.


Para ello existe una función que yo llamo "ObtDatos".


La sintaxis para llamar la función sería la siguiente:

"=ObtDatos(CAMPO DE BUSQUEDA, valor a buscar, Devolver CAMPO)"

En un caso práctico, esta función quedaría de la siguiente forma:

=ObtDatos(“cn”; A2; “mail”)


Suponiendo que en la celda "A2" tenemos el "CN" (Canonical Name), y queremos como resultado el "Mail".

Esta misma función se puede aplicar a todos los atributos de LDAP.

Algunos de ellos:


Atributo LDAP

Ejemplo

CN - Common Name CN=Juan Sanchez.  Este atributo esta hecho de givenName mas SN.
description

displayName displayName = Juan Sanchez.  Similar a CN, dependiendo de cómo se haya definido este campo

Display name -v- Description

Notas importantes de LDAP
Display name y Description son diferentes
El campo de oficina de LDAP es:
physicalDeliveryOfficeName
El atributo de E-mail es: mail
DN - distinguishedName DN es el atributo LDAP mas importante.
CN=Juan Sanchez, OU= Buenos Aires,DC=ypf,DC=com
givenName
Primer nombre
homeDrive
Ruta “home”
name name = Juan Sanchez.  Lo mismo que CN.
objectCategory Define el esquema de la categoría del Active Directory Schema. Por ejemplo, objectCategory = Persona
objectClass objectClass = User.  También usado para Computer, organizationalUnit, o incluso un contenedor. .
physicalDeliveryOfficeName
Oficina
profilePath
Dirección del perfil
sAMAccountName sAMAccountName = jsanchez.  Logon NT 4.0.  Es el nombre de usuario
SN SN = Sanchez. Apellido

Ejemplos específicos de Exchange (Atributos LDAP)

mail Dirección SMTP ejemplo@ejemplo.com
mailNickname Normalmente es el mismo valor que sAMAccountName, pero podría variar, según configuración. 

Otros atributos de LDAP

c Ciudad / Region
company Nombre de la compañia
department Departamento
homephone Telefono
l  (L minúscula) L = Ubicacion.  Ciudad
location Ubicacion.
manager Jefe
mobile celular
OU
Unidad Organizacional
postalCode Codigo Postal
st Estado / Provincia
streetAddress Direccion
telephoneNumber Telefono de la oficina



Finalmente el código para armar esta función es el que figura a continuación:


Function ObtDatos(ByVal SearchField As String, ByVal SearchString As String, ByVal ReturnField As String) As String
' Obtener la ruta del dominio ("dc=DOMINIO, dc=COM", etc)
Dim strDomain As String
strDomain = GetObject("LDAP://rootDSE").Get("defaultNamingContext")
' ADODB Conexion hacia AD
Dim objConnection As ADODB.Connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
' Conexion
Dim objCommand As ADODB.Command
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
' Buscar en AD recursivamente, empezando desde la raiz del dominio
objCommand.CommandText = _
"<LDAP://" & strDomain & ">;(&(objectCategory=User)" & _
"(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & ";subtree"

' RecordSet
Dim objRecordSet As ADODB.Recordset
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount = 0 Then
ObtDatos = "No encontrado" ' No se encontraron registros
Else
ObtDatos = objRecordSet.Fields(ReturnField) ' Valor de retorno
End If
' Cerrar conexion
objConnection.Close
' Limpieza
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
' Hecho por Leandro M. Bino
End Function

Podés descargar la función ya armada e importarla en el Excel directamente desde ACA: https://sites.google.com/site/nevermindssite/descarga/ObtDatos.xla

Sirve para cualquier versión de Excel, y se debe importar en los complementos del mismo.

No hay comentarios:

Publicar un comentario