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.
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.
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.
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
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.
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).
[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.