Alejandro Mazzitelli @ Geeks !

System Center VMM - HyperV - NubePrivada - Private Cloud - www.mswin.org

Creación y Modificación de Usuarios de Active Directory con PowerShell (Bulk-Users)

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.

Escenario

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]

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.

clip_image002
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>

Creando la Unidad Organizacional

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]

 

 

 

 

 

 

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]
Figura 3. Aquí vemos el nuestro script ejecutado desde la Quest Managemente Shell

clip_image002[11]
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.

Crear Cuentas de E-Mail desde PowerShell

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]
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]
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”.

clip_image004
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.

Modificación de atributos en Active Directory con PowerShell (Bulk-Users)

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]
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:

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

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


clip_image006
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

Posted: 13/7/2008 21:43 por Alejandro Mazzitelli | con 20 comment(s) |
Comparte este post:

Comentarios

David Nudelman ha opinado:

Muy bien!

Gracias por compartir la información.

Saludos

David Nudelman

# July 14, 2008 9:34 AM

Oscar Soto MVP DS ha opinado:

Alejandro:

Muchas Gracias por tu artículo, está muy bueno y felicitaciones además por ser el primer artículo del GLAD.

Saludos

Oscar Soto

# July 17, 2008 6:58 AM

Raúl ha opinado:

Muy buen artículo. Me sirvió bastante para dar respuesta a una problemática que se presentó hoy en mi trabajo.

Saludos y gracias.

Raúl Zamora

# July 25, 2008 7:41 PM

Rolando Ortega ha opinado:

Hay forma de especificar otros parametros como los del Profile o Member Of?

# August 10, 2008 5:01 AM

Raúl Aranzueque ha opinado:

Gracias por el artículo,

Me surge una pequeña duda a la hora de la modificación de usuarios.

¿No es necesario indicar la OU en la que queremos realizar el cambio?

Y por otro lado se pueden lanzar los procesos desde una máquina cliente del dominio con XP SP2

Muchas gracias

# August 12, 2008 4:38 PM

Halbert ha opinado:

Muchas gracias y felicidades por este artículo, es práctico, sencillo, claro y realmente útil.

Halbert

# August 14, 2008 3:16 PM

Alejandro Mazzitelli ha opinado:

Raul,

No es necesario especificar la OU porque lo realiza segun la identidad (username). Por otro lado los procesos si se pueden realizar desde un cliente del dominio con Windows XP SP2

Saludos.

# August 15, 2008 3:20 AM

Alejandro Mazzitelli ha opinado:

Rolando,

Es posible. Chequea el link de la documentacion de Quest al pie de la nota donde podes ver el parametro de Profile y otros mas.

Saludos.

# August 15, 2008 3:22 AM

Omar ha opinado:

tu articulo esta muy bueno, pero tuve un problema que la verdad no se como resolverlo  no reconoce el parametro -Name $_.display del archivo csv y el error que me despliga es que new-qaduser no puede ser un valor nulo o vacio

# September 24, 2008 1:08 AM

nahuel ha opinado:

Puede ser que no reconozca el termino QUAD-NEWUSER no sea reconocido como un CMDLET valido? ese es el error que me tira  realmente no le encurtro la vuelta

# October 31, 2008 8:03 PM

Nahuel ha opinado:

Disculpen!   sigo viendo el siguente error

A parameter cannot be found that matches parameter name 'and'.

At line:1 char:11

Lo que no entiendo es de donde sale ese valor, no existe "And" en ninguna parte del Script ni del archivo .CSV

alguna sugerencia?

nahuel.cantero@gmail.com

# November 3, 2008 2:55 PM

Javier ha opinado:

Buenas, a mi me pasa el mismo error que a Omar, me dice que el valor -Name $_.display del archivo csv  no puede ser un valor nulo o vacío.

me esta volviendo loco y no le encuentro lógica.

conocéis alguna solución.

Un saludo y muchas gracias.

# February 3, 2009 7:41 PM

Alejandro Mazzitelli ha opinado:

Estimados,

prometo chequear y darles respuestas a sus inconvenientes en el fin de semana.

Esten atentos!

Saludos!

# February 4, 2009 1:25 AM

Alejandro Mazzitelli ha opinado:

Estoy trabajando en el Review.

Saludos.

# February 10, 2009 2:48 AM

Alejandro Mazzitelli ha opinado:

Estimados, estuve revisando el articulo y no encuentro ningun problema. Quizas si vale una aclaracion, especialmente para Nahuel, que el comando es "New-QADUSER" y no "QUAD-NEWUSER"

Si no te reconoce el comando es porque ejecutaste el Powershell nativa de Microsoft y no el Powershell de Quest Software instalado. Luego de instalar los agregados de Quest para Powershell ejecuta "Quest Managemente Shell" desde el menu Inicio.

Para Omar y Javier, me gustaria ver como estan armando el archivo CSV y el script. Si siguen los procedimientos y ven las capturas el CSV no deberian tener inconvenientes.

Si quieren, pueden contactarme via mail, en donde les puedo brindar el soporte sobre el tema.

Mi mail lo pueden encontrar en el apartado de "Acerca del Autor" en este mismo blog.

Espero sus comentarios.

Saludos

# February 15, 2009 2:59 PM

no1know ha opinado:

Buen aport, si Sr, ahora yo aun no lo he probado pq tengo un pequeño error por ahi que se omitio la powershell y pues ya lo active pero me pide reiniciar, ya lo hare en otro momento, tambien tengo una consulta, se puede asignaar a un grupo?

y con respecto a unos post q vi arriba, pues tu le puedes dar la ubicacion donde kieres q se creen, creo q eso es lo q preguntaban, en fin saludos, haber si puedo hacer las pruebas al finalizar el dia

saludos

no1know

# February 23, 2009 8:57 PM

Santos ha opinado:

Hola, muy buen artículo.

Ahora una duda y consulta a la vez: Hay forma de crear usuarios y/o modificar los diferentes parámetros utilizando el powershell nativo?

# March 10, 2009 7:12 AM

Henry carvajal ha opinado:

Don Alejandro necesito configurar perfiles de usuarios locales para un windows server 2008, la idea es que cualquier usuarios que puedad accesar de cualquier terminal tenga acceso a su perfil desde cualquier pc de la red. Le agradezco su ayuda pues no tengo mucho conocimiento al respecto. Henry

# March 21, 2009 5:51 PM

Julian ha opinado:

Hola, muy buena guía!

Tengo un problema con los nombres y apellidos que contienen acentos. Cuando el usuario es creado los acentos son reemplazados por un signo de interrogación.

Hay alguna solución a ésto?

Gracias!

Saludos.

# April 9, 2009 8:25 PM

dennis roger pascual ha opinado:

como mostrar lista de grupos de una unidad organizacional con powershell v1 porfavor

# May 17, 2009 8:04 PM