Hoy les dejo un articulo que realicé exclusivamente para el Grupo Latinoamericano de Usuarios de Active Directory (GLAD). Así es, acaba de nacer una nueva comunidad de usuarios, en este caso de Active Directory, de la mano de reconocidos MVP´s de Latinoamerica. Entre ellos se encuentran Oscar Soto, Gonzalo Balladares, Carlos Dinapoli, Jorge Diaz entre otros colaboradores. El sitio web para que lo visiten es www.msglad.org donde podrán inscribirse a una lista de distribución para realizar consultas y debatir sobre AD.
Si quieren conocer un poco mas sobre que es GLAD, pueden ver éste link de Microsoft TechNet: http://www.microsoft.com/latam/technet/articulos/tn/2008/jun08-16.mspx
Saludos,
Alejandro.
Creación y Modificación de Usuarios de Active Directory con PowerShell (Bulk-Users)
Introducción
En este documento utilizaremos la nueva consola de comandos de Windows denominada PowerShell para crear y modificar usuarios en el Active Directory. Desde ella, podremos administrar desde un usuario hasta el número que necesiten. Existen muchos escenarios en los cuales debemos crear una gran cantidad de usuarios (nuevo dominio, nuevos empleados, etc), como así también podríamos necesitar modificar varios datos de usuarios ya existentes (modificación de teléfono, puesto, dirección, etc). En el ejemplo de ésta guía crearemos 13 usuarios de Active Directory y luego modificaremos ciertos datos para poder ejemplificar el script de modificación. Por último, activaremos el Mailbox de cada usuario en Microsoft Exchange 2007 SP1, por medio de PowerShell o bien por medio de la GUI.
Nuestro escenario es muy simple, el cual consta de un servidor que es nuestro controlador de dominio principal, es DNS Server y posee Microsoft Exchange Server 2007 SP1 instalado. En nuestro caso tenemos instalado todo en un solo servidor debido a cuestiones prácticas de la guía. Recuerden que no es recomendable instalar el servidor de correo en el mismo servidor que es controlador de nuestro dominio.
![clip_image001[4]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image0014_thumb.jpg)
Requisitos
Nuestro controlador de dominio posee Microsoft Windows Server 2003 Standard Edition con Service Pack 2 y la actualización de R2 instalada, siendo ésta última no necesaria. Adicionalmente debemos tener las siguientes aplicaciones instaladas:
Powershell 1.0
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
Microsoft Core XML Services (MSXML) 6.0
http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1&displaylang=en
PowerShell Commands for Active Directory (ActiveRoles Management Shell) by Quest Software
http://www.quest.com/powershell/activeroles-server.aspx
PowerShell Commands for Active Directory es un agregado para Microsoft PowerShell realizado por la firma Quest Software, el cual es gratuito y agrega comandos de PowerShell para administrar objetos de nuestro Active Directory.
Creando Bulk-Users en Active Directory con PowerShell
Lista de Usuarios
Una vez que dispongamos de nuestro servidor (Controlador de Dominio) instalado, procederemos a utilizar PowerShell para crear Usuarios de Active Directory a partir de una lista de usuarios, que en principio podríamos tener en Microsoft Excel pero que en definitiva debemos tenerla en un archivo CSV.

Figura 1. Lista completa de usuarios con datos adicionales
En la Figura 1 tenemos una lista completa de usuario con todos sus datos. En ella tenemos: nombre, apellido, nombre a mostrar, nombre de usuario, teléfono, area de trabajo, cargo laboral, empresa, dirección postal de trabajo, código postal y ciudad y password.
Una vez completada toda la lista la debemos guardar como CSV (archivo delimitado por coma), el cual utilizaremos en nuestro script de PowerShell.
Conociendo los cmdlets de Quest Software para PowerShell
Para crear usuarios debemos utilizar el cmdlet New-QADuser.
Sintaxis
La sintaxis que utilizaremos en el script de PowerShell para crear los usuarios es la siguiente:
| New-QADUser [-Name] <String> -ParentContainer <IdentityParameter> [-City <String>] [-Company <String>] [-Department <String>] [-Fax <String>] [-FirstName <String>] [-HomePhone <String>] [-Initials <String>] [-LastName <String>] [-Manager<IdentityParameter>] [-MobilePhone <String>] [-Notes <String>] [-Office <String>] [-Pager <String>] [-PhoneNumber <String>] [-PostalCode <String>] [-PostOfficeBox <String>] [-SamAccountName <String>] [-StateOrProvince <String>] [-StreetAddress <String>] [-Title <String>] [-UserPrincipalName <String>] [-WebPage <String>] [-UserPassword <String>] [-ObjectAttributes <ObjectAttributesParameter>] [-Description <String>] [-DisplayName <String>] [-ExcludedProperties <String[]>] [-IncludedProperties <String[]>] [-DeserializeValues] [-UseDefaultExcludedProperties] [-UseDefaultExcludedPropertiesExcept <String[]>] [-Proxy] [-Service <String>] [-ConnectionAccount <String>] [-ConnectionPassword <SecureString>] [-Credential <PSCredential>] [-Connection <ArsConnection>] [-UseGlobalCatalog] |
A continuación se listan los atributos/sintaxis posibles a usar con el cmdlet para modificar los atributos de los usuarios.
| Atributo | Sintaxis |
| l | -City <String> |
| company | -Company <String> |
| description | -Description <String> |
| department | -Department <String> |
| displayName | -DisplayName <String> |
| facsimileTelephoneNumber | -Fax <String> |
| givenName | -FirstName <String> |
| homePhone | -HomePhone <String> |
| initials | -Initials <String> |
| sn | -LastName <String> |
| manager | -Manager <IdentityParameter> |
| mobile | -MobilePhone <String> |
| info | -Notes <String> |
| physicalDeliveryOfficeName | -Office <String> |
| pager | -Pager <String> |
| Parametro para setear la clave del usuario | -UserPassword <String> |
| telephoneNumber | -Phone <String> |
| postalCode | -PostalCode <String> |
| postOfficeBox | -PostOfficeBox <String> |
| samAccountName | -SamAccountName <String> |
| st | -StateOrProvince <String> |
| streetAddress | -StreetAddress <String> |
| title | -Title <String> |
| userPrincipalName | -UserPrincipalName <String> |
| wWWHomePage | -WebPage <String> |
El siguiente paso comprende en crear una nueva Unidad Organizacional (OU) en nuestro dominio al cual denominaremos “UsuariosNuevos”, tal como podemos ver en la Figura 2.
![clip_image002[5]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image0025_thumb.jpg)
Figura 2. Aquí es donde estarán los nuevos usuarios que crearemos con PowerShell
Armando el script de creación de usuarios
Ahora solo nos queda por crear el script final acorde a nuestra lista de usuarios. Para ello, primero analizaremos el script y luego lo ejecutaremos.
| Import-CSV c:\users.csv | ForEach-Object { New-QADUser -Name $_.display -SamAccountName $_.SamAccountName -UserPrincipalName $_.user1 -FirstName $_.first -LastName $_.last -DisplayName $_.display -Phone $_.phone -Department $_.departamento -Title $_.Title -Company $_.company -Streetaddress $_.street -PostalCode $_.zip -City $_.city -StateOrProvince $_.state -UserPassword $_.password -ParentContainer mazzite.com/UsuariosNuevos } |
En este script utilizaremos el cmdlet “Import-CSV” para importar la lista de nuestros usuarios, la cual habíamos creado anteriormente, que tomará de la ubicación que le indiquemos. Luego por cada objeto de la lista se ejecutara el cmdlet “New-QADUser” seguido de los parámetros con sus variables correspondientes. El código resaltado en verde son los nombres que le hemos dado a cada columna de datos en nuestra lista de usuarios. Por último, el dato resaltado en rojo, es la OU en donde se crearan los nuevos usuarios. Cabe destacar que estamos utilizando solo algunos de los parámetros para modificar atributos. Si quisiéramos agregar algún otro dato, solo es cuestión de agregar la sintaxis según la tabla vista anteriormente y agregar la columna en nuestra lista de usuarios.
![clip_image002[7]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image0027_thumb.jpg)
Figura 3. Aquí vemos el nuestro script ejecutado desde la Quest Managemente Shell
![clip_image002[11]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image00211_thumb.jpg)
Figura 4. Como resultado vemos que se han creado los usuarios correspondientes.
Como hemos visto con éste script, crear grandes cantidades de usuarios toma tan solo pocos minutos. Lo más importante es tener la lista de usuarios completa y con todos los datos actualizados, aunque esto no sería un problema ya que existe otro cmdlet que nos permitirá realizar cambios en los atributos de cada usuario de una forma bastante similar a la que hemos utilizado para crear usuarios.
Como opcional, veremos cómo crear en forma muy sencilla una cuenta de e-mail por cada uno de los usuarios que hemos creado anteriormente.
![clip_image002[13]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image00213_thumb.jpg)
Figura 5. Management Console de Microsoft Exchange Server 2007. Tan solo vemos dos usuarios con cuenta de e-mail.
Para crear las cuentas de e-mail a cada usuario tan solo debemos correr el siguiente script luego de haber creado los usuarios:
| Get-User –OrganizationalUnit “MAZZITE.COM/UsuariosNuevos” | Enable-Mailbox -Database “SRV1\Mailbox Database” |
Es importante aclarar que el script para crear las cuentas de e-mail lo debemos ejecutar desde la consola de PoweShell de Microsoft Exchange Server 2007. Una vez que ejecutemos el script de PowerShell obtendremos algo similar como la Figura 6.
![clip_image002[15]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image00215_thumb.jpg)
Figura 6. Ahora los usuarios poseen cuenta de e-mail en nuestra empresa.
Si entramos nuevamente a la consola grafica de administración de Microsoft Exchange Server 2007 veremos que ahora vemos mas de dos cuentas de e-mail. Ahora se suman todos los usuarios que hay en la OU “UsuariosNuevos”.

Figura 7. Management Console de Microsoft Exchange Server 2007. Con tan solo un script hemos creado las cuentas de e-mail de todos los usuarios de una determinada OU.
Es importante aclarar que Microsoft Exchange Server 2007 permite crear cuentas de e-mail para usuarios existentes con muy pocos pasos, utilizando la selección múltiple a través de la consola gráfica desde Service Pack 1 de Exchange 2007. Sin Service Pack 1, solo hubiera sido posible a través de la GUI realizando la creación usuario por usuario.
Anteriormente hemos visto como crear usuarios con todos sus datos en nuestro Active Directory. Ahora veremos cómo podemos modificar atributos para grandes cantidades de usuarios en muy pocos pasos.
Modificando la lista de Usuarios
Existen muchos casos en el cual debamos modificar un mismo dato para todos los usuarios o bien para cierta cantidad de ellos. En nuestro caso veremos cómo agregar un dato y modificar otro dos datos para todos los usuarios que hemos creado. Este caso, ejemplifica la modificación de la dirección y código postal, ya que la empresa se ha mudado de oficina y se ha agrega una descripción a cada uno de los usuarios.
![clip_image002[18]](http://www.mazzite.com/geeks/img/e3ffa30b622d_11493/clip_image00218_thumb.jpg)
Figura 8. En nuestra lista de usuarios debemos modificar los datos necesarios y agregar otra columna con los nuevos datos.
Tal como vemos en la Figura 8, hemos modificado la dirección de cada usuario, el código postal y al final hemos agregado la columna de “descripción”. Una vez finalizada la modificación volvemos a guardar el archivo como CSV.
Armando el script de modificación de Usuarios
Ahora tan solo debemos crear y ejecutar el script de PowerShell para modificar los atributos de los usuarios en nuestro Active Directory.
| Import-CSV c:\users.csv | ForEach-Object { Set-QADUser -Identity $_.SamAccountName -Streetaddress $_.street -PostalCode $_.zip -description $_.descripcion } |
Una vez ejecutado el script, veremos como resultado algo similar como vemos en las siguientes Figuras:

Figura 9. Aquí vemos el script en acción.

Figura 10. Active Directory Users and Computers: La descripción ha sido agregada a cada usuario

Figura 11. La dirección y el código postal han sido modificados.
Resumen
A lo largo de ésta guía hemos visto el potencial de PowerShell para la administración de Active Directory y Microsoft Exchange Server 2007. Existen una gran cantidad de parámetros y opciones que en esta guía no hemos visto, por lo cual les recomiendo que revisen toda la documentación de Microsoft PowerShell y de Quest Software para que puedan adaptar y utilizar ésta fascinante herramienta que nos permitirá automatizar gran parte de nuestro trabajo.
Links y Referencias
Grupo Latinoamericano de Usuarios de Active Directory
http://www.msglad.org
Grupo Latinoamericano de Usuarios de Exchange Server
http://www.msglue.org
Blog del Team de Windows PowerShell
http://blogs.msdn.com/PowerShell
Download de Windows PowerShell
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
Quest ActiveRoles Management Shell for Active Directory - Administrator's Guide
http://info.quest.com/QuestWebMgmtShellForADAdminGuide
Quest Downloads
http://www.quest.com/powershell/activeroles-server.aspx
---
Documento exclusivo para MSGLAD - www.msglad.org