GuilleSQL :: Microsoft SQL Server, SSIS, y más !!

Importar usuarios con CSVDE en Directorio Activo


Recientemente he tenido que preparar una importación de usuarios en un Directorio Activo basado en Windows Server 2003, para lo cual he utilizado la utilidad CSVDE. Sin embargo, la utilidad CSVDE tiene algunos inconvenientes, por lo que de forma adicional me ha sido necesario utilizar un pequeño script VBS. Por otro lado, estaba la generación del fichero CSV, algo que podemos hacer utilizando Excel, sus fórmulas, y el maravilloso copiar y pegar.

No es algo especialmente complicado, pero sí es una tarea con la que uno no suele lidiar habitualmente, tener una pequeña chuletilla puede resultar de gran ayuda para ahorrar algo de tiempo, y así poder importar y exportar usuarios de Directorio Activo con CSVDE con facilidad.

CSVDE tiene varias limitaciones. Por ejemplo, existen varios atributos que no podremos importar utilizando la utilidad CSVDE, como sería el caso de la pertenencia a grupos (el atributo memberOf). Si intentamos importar alguno de estos atributos prohibidos, podríamos obtener un mensaje de error como el siguiente: Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM). Esto puede ser una limitación importante, y además es algo confuso, ya que muchos de estos atributos sí que se pueden exportar con CSVDE pero luego no pueden ser importados con esta misma herramienta.

CSVDE tiene varias limitaciones. Por ejemplo, existen varios atributos que no podremos importar utilizando la utilidad CSVDE, como sería el caso de la pertenencia a grupos (el atributo memberOf). Si intentamos importar alguno de estos atributos prohibidos, podríamos obtener un mensaje de error como el siguiente: Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM). Esto puede ser una limitación importante, y además es algo confuso, ya que muchos de estos atributos sí que se pueden exportar con CSVDE pero luego no pueden ser importados con esta misma herramienta.

Tampoco podremos importar la contraseña de los usuarios utilizando CSVDE, y además por defecto los usuarios serán creados en estado deshabilitado. Esto es otro problema, ya que si intentamos habilitar un usuario importado con CSVDE, probablemente tengamos problemas adicionales debido a que estemos violando la política de complejidad de contraseñas.

Por estos motivos, las importaciones de usuarios en Directorio Activo en ocasiones se realizan con un Script, o en su defecto, se realiza una importación masiva con CSVDE para seguidamente utilizar un Script para el resto de tareas.

Por otro lado, para conocer qué valor asignar a algunos atributos puede resultar de utilidad la herramienta administrativa ADSI Edit. Un ejemplo es el atributo accountExpires, que sirve para especificar en qué fecha expira un Usuario. Este atributo almacena un valor numérico, por lo tanto, si queremos realizar una importación masiva de usuarios con CSVDE configurando una fecha de expiración (accountExpires), podemos configurar el valor de fecha de expiración que deseemos en un usuario de prueba con la herramienta administrativa Active Directory Users and Computer (ADUC), y seguidamente obtener el valor deseado con la herramienta administrativa ADSI Edit. Este valor es el que deberemos especificar en el fichero CSV que vamos a importar.

Por otro lado, para conocer que valor asignar a algunos atributos puede resultar de utilidad la herramienta administrativa ADSI Edit. Un ejemplo es el atributo accountExpires, que sirve para especificar en qué fecha expira un Usuario. Este atributo almacena un valor numérico, por lo tanto, si queremos realizar una importación masiva de usuarios con CSVDE configurando una fecha de expiración (accountExpires), podemos configurar el valor de fecha de expiración que deseemos en un usuario de prueba con la herramienta administrativa Active Directory Users and Computer (ADUC), y seguidamente obtener el valor deseado con la herramienta administrativa ADSI Edit. Este valor es el que deberemos especificar en el fichero CSV que vamos a importar

Otro error que nos podemos encontrar es el error Invalid DN Syntax, The server side error is Multiple values were specified for an attribute that can have only one value. En mi caso, se debía a la existencia de espacios en blanco a la derecha en los valores asociados al atributo cn. Una vez fueron eliminados dichos espacios en blanco, este error desapareció.

Otro error que nos podemos encontrar es el error Invalid DN Syntax, The server side error is Multiple values were specified for an attribute that can have only one value. En mi caso, se debía a la existencia de espacios en blanco a la derecha en los valores asociados al atributo cn. Una vez fueron eliminados dichos espacios en blanco, este error desapareció.

Otro problema que nos podemos encontrar si utilizamos Excel para generar el fichero CSV que deseamos importar con CSVDE, es que Excel utilice el carácter punto y coma (;) en lugar de una coma (,) para separar los diferentes valores del fichero. En este caso, podemos obtener el mensaje de error Error Reading attribute list.

Otro problema que nos podemos encontrar si utilizamos Excel para generar el fichero CSV que deseamos importar con CSVDE, es que Excel utilice el carácter punto y coma (;) en lugar de una coma (,) para separar los diferentes valores del fichero. En este caso, podemos obtener el mensaje de error Error Reading attribute list

Además, está el problema de los acentos y los caracteres raros. Para resolver el problema del separador de valores (garantizar que utilizaremos la coma) y los problemas derivados de acentos y caracteres raros, podemos crearnos una fórmula en Excel para cada usuario a importar (más una línea adicional para las cabeceras), que nos genere la correspondiente línea que deseamos que incluya nuestro fichero CSV. Seguidamente, copiamos todo ese texto en el Notepad, y al guardar, es muy importante que seleccionemos la opción UNICODE.

Además, está el problema de los acentos y los caracteres raros. Para resolver el problema del separador de valores (garantizar que utilizaremos la coma) y los problemas derivados de acentos y caracteres raros, podemos crearnos una fórmula en Excel para cada usuario a importar (más una línea adicional para las cabeceras), que nos genere la correspondiente línea que deseamos que incluya nuestro fichero CSV. Seguidamente, copiamos todo ese texto en el Notepad, y al guardar, es muy importante que seleccionemos la opción UNICODE

Otro detalle que tendremos que tener en cuenta para generar nuestro fichero CSV para importar con CSVDE, es que nos puede interesar encerrar cada valor entre comillas dobles, para de este modo evitar confusiones cuando en el valor de un atributo existan caracteres como la propia coma (,) la cual es a su vez el separador de valores.

Hay más errores y problemas que nos podemos encontrar, pero estos son un buen resumen para tener una idea de cómo funciona el tema de importar usuarios con CSVDE.

En principio, si no nos encontramos con más problemas, deberíamos ser capaces de realizar la importación, por ejemplo, ejecutando un comando como el siguiente: csvde -i -f carga_usuarios_extranet.csv -j c:\temp

En principio, si no nos encontramos con más problemas, deberíamos ser capaces de realizar la importación, por ejemplo, ejecutando un comando como el siguiente

Los usuarios importados están deshabilitados y con la contraseña en blanco, como se muestra en la siguiente pantalla capturada.

Los usuarios importados están deshabilitados y con la contraseña en blanco, como se muestra en la siguiente pantalla capturada

Seguidamente, utilizamos un script VBS que modifique la contraseña y el estado de las cuentas (userAccountControl), para conseguir así alcanzar el resultado final deseado.

Seguidamente, utilizamos un script VBS que modifique la contraseña y el estado de las cuentas (userAccountControl), para conseguir así alcanzar el resultado final deseado

Ahora, nuestras cuentas ya están preparadas para su utilización.

Ahora, nuestras cuentas ya están preparadas para su utilización.

Por último, a continuación podéis descargar un ZIP que contiene una Excel de ayuda a la generación del contenido CSV a importar con CSVDE, así como también contiene un Script VBS para cambiar la contraseña y las opciones de usuario. Antes de utilizar ambos, es muy conveniente revisarlos, ya que probablemente tendréis que hacer alguna pequeña modificación (ej: en el script VBS modificar la OU en la que están los usuarios sobre los que se desea actuar).

Descargar ZIP con Excel y Script VBS de ayuda para importar usuarios con CSVDE (csvde_importar_usuarios.zip)

[Actualizado 7 de Junio de 2012: he publicado un nuevo artículo que incluye una importación de 50.000 usuarios aleatorios en Directorio Activo con CSVDE y VBScript, similar al presente artículo, pero con muchos más usuarios de ejemplo, importando más propiedades en Directorio Activo (Departamento, Puesto, Teléfono, Manager, etc.), e importando en múltiples OUs de destino.]

Poco más por hoy. Como siempre, confío que la lectura resulte de interés.

 



Comentarios

juan.sebastian - 20/06/2014 (UTC)
Buenas tardes Ingeniero;

Quisiera saber si usted nos podría regalar una sesión de explicación para importar unos usuarios al directorio activo desde google apps, la idea es saber como creamos el archivo con los usuarios, y como desarrollamos el VBS, somos la Universidad de Caldas, Manizales Colombia.

Mucho gusto Juan Sebastián Robledo Giraldo



Miembros de
Miembros de GITCA (Global IT Community Association)

Menu de Usuario
  Iniciar Sesión
  Registrarse
  Restablecer Contraseña
  Ventajas de Registrarse

Acerca de
  Contigo desde Oct 2007
  771 usuarios registrados
  86146 pageloads/mes
  Ranking Alexa 498160

Social Networks
Sigue a Portal GuilleSQL en Linkedin !!
Sigue a Portal GuilleSQL en Twitter !!



Archivo

Marzo de 2019 (1)
Octubre de 2018 (1)
Julio de 2018 (1)
Junio de 2018 (4)
Mayo de 2018 (5)
Abril de 2018 (3)
Marzo de 2018 (2)
Febrero de 2018 (7)
Enero de 2018 (1)
Diciembre de 2017 (15)
Noviembre de 2017 (7)
Junio de 2017 (3)
Mayo de 2017 (1)
Marzo de 2017 (3)
Enero de 2017 (4)
Junio de 2016 (1)
Mayo de 2016 (2)
Abril de 2016 (2)
Septiembre de 2015 (2)
Agosto de 2015 (2)
Junio de 2015 (10)
Mayo de 2015 (4)
Abril de 2015 (8)
Marzo de 2015 (11)
Octubre de 2014 (3)
Septiembre de 2014 (7)
Agosto de 2014 (5)
Julio de 2014 (2)
Mayo de 2014 (4)
Abril de 2014 (4)
Marzo de 2014 (4)
Febrero de 2014 (1)
Enero de 2014 (5)
Diciembre de 2013 (8)
Noviembre de 2013 (2)
Octubre de 2013 (7)
Septiembre de 2013 (6)
Agosto de 2013 (1)
Julio de 2013 (6)
Junio de 2013 (11)
Mayo de 2013 (7)
Abril de 2013 (6)
Febrero de 2013 (5)
Enero de 2013 (7)
Diciembre de 2012 (12)
Noviembre de 2012 (13)
Octubre de 2012 (5)
Septiembre de 2012 (3)
Agosto de 2012 (6)
Julio de 2012 (4)
Junio de 2012 (1)
Mayo de 2012 (2)
Abril de 2012 (7)
Marzo de 2012 (16)
Febrero de 2012 (9)
Enero de 2012 (5)
Diciembre de 2011 (10)
Noviembre de 2011 (10)
Octubre de 2011 (4)
Septiembre de 2011 (5)
Agosto de 2011 (2)
Julio de 2011 (2)
Junio de 2011 (4)
Mayo de 2011 (2)
Abril de 2011 (6)
Marzo de 2011 (4)
Febrero de 2011 (10)
Enero de 2011 (5)
Diciembre de 2010 (6)
Noviembre de 2010 (4)
Octubre de 2010 (8)
Septiembre de 2010 (4)
Agosto de 2010 (1)
Julio de 2010 (3)
Mayo de 2010 (5)
Abril de 2010 (6)
Marzo de 2010 (8)
Febrero de 2010 (3)
Enero de 2010 (1)
Diciembre de 2009 (9)
Noviembre de 2009 (14)
Octubre de 2009 (2)
Septiembre de 2009 (8)
Agosto de 2009 (2)
Julio de 2009 (10)
Junio de 2009 (9)
Mayo de 2009 (10)
Abril de 2009 (9)
Marzo de 2009 (3)
Febrero de 2009 (2)
Enero de 2009 (3)
Noviembre de 2008 (2)
Octubre de 2008 (2)
Septiembre de 2008 (2)
Agosto de 2008 (5)
Julio de 2008 (5)
Junio de 2008 (1)
Mayo de 2008 (3)
Abril de 2008 (2)
Marzo de 2008 (2)
Febrero de 2008 (2)
Enero de 2008 (5)
Noviembre de 2007 (2)
Octubre de 2007 (2)






Copyright © 2007 GuilleSQL, todos los derechos reservados.