Introducción al problema

A veces, por el motivo que sea, bien por curiosidad o por necesidad como fue mi caso, es necesario modificar un atributo de un usuario en un dominio basado en Active Directory.
Una manera sencilla sería, en Windows Server 2003, sería seleccionar a todos los usuarios y cambiarles el atributo a todos a la vez. Pero este paso no siempre es posible si cada usuario ha de tener, como es el caso que expongo, un valor diferente al resto.

Para ello, no queda más remedio que buscar "algo" que nos ayude a realizar esta tarea. La solución propuesta es el resultado de un "mix" de dos scripts que encontré "googleando" por Internet.

Solución propuesta

La solución que opté por usar fue la siguiente,

Crear un .vbs que:

  1. Dado un fichero de texto en formato .CSV, leyera los datos de él.
  2. Guardara todos los datos del .CSV en un array en memoria para agilizar la ejecución del proceso (gracias Richard!!!)
  3. Recorriera de forma recursiva todo el Active Directory mediante dos funciones de consulta LDAP
  4. Una vez localizado el valor a cambiar, evidentemente, cambiarlo.
El formato del archivo .CSV lo podeis previsualizar mediante la descarga del archivo modifyAD.vbs de nuestro repositorio

Explicación del código

  • La función leerDatosCSV: Esta función abre el .csv y lo recorre hasta el final, guardando en un array los datos que va leyendo. Esta última parte se hace con la función buscarDatos
  • Siguiente paso: Encontrar la raíz del Active Directory que queremos recorrer.
  • EnumOUs: Función recursiva cuyo parámetro de entrada es la raíz del AD. La utilidad de esta función es recorrer todas las OUs (Unidades Organizativas) en el Active Directory para posteriormente, usando la función EnumUsers buscar a los usuarios del mismo.
  • Como se puede ver, la única diferencia real entre las dos es que en la primera filtramos por "Organizational Unit" mientras que en la segunda lo hacermos por "User"
  • Una vez aquí, y mediante la función BuscaUser, vamos comparando los valores de la segunda posición del array con el valor del "user" que actualmente tiene la variable de recursión. Si ambos valores coinciden, procederemos a actualizar/cambiar el valor del atributo "Description" del usuario.
  • Si todo ha ido bien, la variable "changeMade" se convierte en "True" y confirmamos el cambio del valor del atributo.
  • Este proceso se repite hasta finalizar el recorrido por todo el Active Directory.

Marc
MCP - MVP Windows - Shell/User