Proceso para extración de datos: Como extraer usuarios del Directorio Activo con ETL
Extraer Usuarios del Directorio Activo con ETL (Active Directory)
Directorio Activo con ETL
Cuando escuchas a un usuario solicitando que quiere todos los usuarios del directorio activo, y dices para que? porque? con que finalidad, pero luego te dices es posible? como lo haria
Creo que mas alla de cuestionar a mis usuarios, termine cuestionando mis conocimientos, para saber si era posible dicho requerimiento y bueno, como siempre un post nace de esa manera, con un usuario un requerimiento y una duda, usaremos nuestro componente preferido en SQL Server integration services, nada mas y nada menos que un task script y un poquito de C# para terminar el asunto, necesitaremos idenficiar que columnas necesitamos de nuestro directorio
Paso 1: Buscar cafe, jajajaaj ( me encanta el cafe y sinceramente me hace pensar con claridad asi sea oscuro)
Paso 2: Crear un proyecto de SSIS
Paso 2: Crear un flujo de datos (DataFlow)
Paso 3: Agregar un componetScript
Paso 4: Seleccionar el tipo de transformación del mismo, para nuestro caso es de tipo origen
Paso 5: Crear las columnas necesitaremos retornar para nuestro beneficio, en este ejemplo retornaremos nombre apellido y departamento
Paso 5: Abriremos el codigo de nuestro componente de tipo script donde conectaremos con el directorio activo
Paso 6: Agregamos nuestra nueva referencia System.DirectoryServices
Paso 7: Colocaremos nuestro codigo, Recuerden cambiar el dominio por el de ustedes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; using Microsoft.SqlServer.Dts.Runtime.Wrapper; using System.DirectoryServices #endregion public override void CreateNewOutputRows() { string domainConnectionString = "LDAP://DC=TuDominioDeLaEmpresa,dc=com"; using (DirectorySearcher ds = new DirectorySearcher(new DirectoryEntry(domainConnectionString))) { ds.Filter = "(&" + "(objectClass=user)" + // Only users and not groups "(department=*)" + // All departments "(givenname=j*)" + // Firstname starts with j ")"; using (SearchResultCollection results = ds.FindAll()) { foreach (SearchResult result in results) { Output0Buffer.AddRow(); Output0Buffer.Nombre= GetPropertyValue(result, "cn"); Output0Buffer.Apellido= GetPropertyValue(result, "sn"); Output0Buffer.Departamento= GetPropertyValue(result, "department"); } } } } private static string GetPropertyValue(SearchResult Results, string Property) { // Null value results in count zero if (Results.Properties[Property].Count > 0) { return Results.Properties[Property][0].ToString(); } else { return ""; } } |
Paso 8: Nuestro resultados
System.DirectoryServices Namespace
https://msdn.microsoft.com/en-us/library/system.directoryservices(v=vs.110).aspx
El espacio de nombres System.DirectoryServices proporciona acceso fácil a Servicios de dominio de Active Directory desde código administrado. El espacio de nombres contiene dos clases de componentes, DirectoryEntry y DirectorySearcher, que utilizan la tecnología de interfaces de servicios de Active Directory (ADSI). ADSI es el conjunto de interfaces que proporciona Microsoft como una herramienta flexible para trabajar con una variedad de proveedores de red. ADSI brinda al administrador la capacidad de localizar y administrar recursos en una red con relativa facilidad, independientemente del tamaño de la red.
el codigo en editor de script se copia y pega todo reemplazando a lo que se genera antes de pegar?
No, recuerda que cuando generas, queda un numero de poryecto solo toma las clases que necesitar para el mismo
Hola estuve haciendo pruebas con tu código pero creo que le falta una parte ya que me manda errores con DirectoryEntry y DirectorySearcher se supone que deberían estar con la librería no? también me manda error con el void del principio. No se si debe estar en otro script o en el main puede funcionar, me gusto tu código solo otra duda para agregar mas datos lo tengo que agregar con el Foreach y estoy viendo que lo tienes con J por que lo tienes así?
Gracias por tu comentario, escribeme directamente al correo jmmana@gmail.com y te ayudo ante cualquier duda que tengas