Descubre los comandos básicos de PowerShell para la gestión de usuarios de tu AD DS Server para poder agilizar y ahorrar tiempo en la gestión de la infraestructura.
Tal como expusimos en el artículo 10 Comandos de PowerShell para controlar los objetos de AD DS Server “la configuración y el control de una infraestructura de TI es una tarea ardua en la que el equipo técnico tiene que invertir un gran esfuerzo, con cientos de horas dedicadas a la correcta planificación y configuración, y cientos, sino miles de horas de mantenimiento, incluyendo tareas de diversa índole”.
En ese artículo ya nos dedicamos a plantear ciertos comandos que nos ayudarían en la auditoría de los objetos de nuestro AD DS Server, concretamente la auditoría de usuarios y equipos, pero está claro que con eso no tenemos todo el trabajo hecho, y por eso hemos pensado escribir este artículo en el que vamos a hablar de como dar de alta usuarios y grupos y como hacer gestiones básicas con los mismos.
Por supuesto, recomendamos hacer las pruebas inicialmente en un servidor apartado, lo que comúnmente se llama “maqueta” o “piloto”, y no hacer las pruebas sobre un servidor productivo, ya que nos permitirá tener mayor libertad y evitaremos tener algún percance. Si no dispones de una infraestructura de AD DS Server para hacer las pruebas, puedes seguir el siguiente tutorial en el que se explica Cómo configurar tu AD DS server en Jotelulu.
¿Cómo gestionar los usuarios de AD DS Server mediante PowerShell?
Sin más preámbulo vamos a comenzar a hacer las pruebas y a comentar todo lo que vamos a necesitar y a hablar de los distintos comandos y modificadores que podemos usar.
Preparación de la operación de PowerShell con AD DS Server:
Antes de poder trabajar con PowerShell frente a Directorio Activo (AD) deberemos comprobar la versión de PowerShell con la que contamos en el servidor y también deberemos importar el módulo de administración de AD DS.
Para poder comprobar la versión de PowerShell podemos usar los siguientes comandos:
Get-Host
$PSVersionTable
$PSVersionTable.PSVersion
Por un lado, podemos usar el comando “Get-Host” sin parámetros, que nos devolverá una serie de datos de la consola y entre los que nos interesa el parámetro “Version”, que referencia a la versión de PowerShell.
Por otro lado, se puede consultar directamente por la versión de PowerShell, lanzando la siguiente consulta “$PSVersionTable” que nos devolverá bastante información, y si solo queremos que nos muestra la versión de PowerShell, podremos lanzar este comando “$PSVersionTable.PSVersion”.
Consultamos la versión de PowerShell instalada en el sistema
Ahora que tenemos claro que podemos trabajar con PowerShell ya que está instalado en el sistema, necesitamos importar el módulo que nos permitirá trabajar con Active Directory.
El módulo que nos permite administrar el AD DS desde PowerShell es “ActiveDirectory”, todo un alarde de originalidad por parte de Microsoft, aunque también un nombre que simplifica mucho su búsqueda.
Para importar el módulo debemos arrancar una consola de PowerShell con permisos de Administrador. A continuación, se deberá lanzar el siguiente comando:
Import-Module ActiveDirectory
La instalación es bastante rápida y en ocasiones se puede apreciar únicamente un destello en pantalla, pero todo irá bien si no se muestra ningún mensaje de error.
Importamos el módulo de administración de Active Directory para PowerShell
Solicitar información sobre el Dominio:
Ahora que tenemos la capacidad de conectar al dominio y lanzar comandos de todo tipo, vamos a comenzar por lanzar algunas consultas para obtener cierta información sobre el bosque, el dominio y los controladores de dominio.
Para obtener información sobre el bosque de AD DS podemos lanzar el siguiente comando:
Get-ADForest
Que nos proporciona información sobre los siguientes puntos:
- El nombre del bosque
- Dominios
- Sitios.
- Raíz del dominio.
- Particiones.
- Maestro de nombres de dominio.
- Nivel funcional del bosque.
Pudiendo filtrar para consultar por un punto en concreto, como por ejemplo cual es el Maestro de Nombres de Dominio o cual es el Nivel funcional del bosque, usando un “|” (pipe o tubería) para redirigir la salida y un “Select” para seleccionar los campos que nos interesen.
Consultamos información sobre el bosque de AD DS
En el caso de querer obtener información sobre el Dominio de AD DS nos encontraremos con un comando muy similar al comando “Get-ADForest”, el comando “Get-ADDomain” donde como vemos solo se cambia “Domain” por “Forest”, cosa que nos puede ayudar a recordarlo.
El comando “Get-ADDomain” nos muestra la siguiente información:
- El nombre del Dominio.
- Dominios hijos.
- Dominio Padre.
- Raíz DNS.
- Nivel funcional del Dominio.
- Bosque al que pertenece.
- Nombre NetBIOS.
- Emulador PDC.
- Maestro RID.
- Maestro de Infraestructura.
Pudiendo usar filtros como en el caso anterior para poder hacer distintas consultas, como por ejemplo el Nivel del Dominio, el Nombre del Dominio, etc.
Unos ejemplos de ello podrían ser:
- Get-ADDomain | Select Name
- Get-ADDomain | Select DomainMode
- Get-ADDomain | Select Name, DomainMode
Consultamos información sobre el dominio de AD DS
Aprovechamos en este punto, para introducir la forma en que podemos modificar la presentación de la salida para adecuarla a nuestras necesidades. Por un lado, para poder modificar la presentación, se deberá usar nuevamente el “|” (pipe o tubería) para redirigir la salida hacia el formato deseado. Estas modificaciones las podemos utilizar siempre que lo creamos conveniente para mejorar la presentación de los datos obtenidos.
Tres de los formatos más usados son:
- FT: Tabla (Format Tabla)
- FL: Lista (Format List)
- Out-GridView: Lista (Formato en ventana externa)
Siendo usados de la siguiente manera:
- Get-ADDomain | Select Name, DomainMode | FT
- Get-ADDomain | Select Name, DomainMode | FL
- Get-ADDomain | Select Name, DomainMode | Out-GridView
Ejemplos de representación de la salida de una consulta de PowerShell
También puede ser interesante hacer consultas para obtener información de los Controladores de Dominio (DC) de nuestra infraestructura de AD DS Server.
Para obtener información sobre ellos, se debe usar el comando “Get-ADDomainController” y en este caso, se puede usar el modificador “-Filter” para poder seleccionar lo que nos interesa que se muestre o seguir usando el “| Select” como hasta ahora.
Consultamos información sobre los Controladores de Dominio de nuestro AD DS
Obtener información de usuarios:
A continuación, el siguiente punto que deberíamos revisar, es Obtener información de los usuarios, como, por ejemplo, consultar todas la información y configuración de un usuario en concreto.
Tenemos varias formas de realizarlo, la primer de ellas es lanzar el comando “Get-ADUser” sin más parámetros que el nombre de usuario del que queremos obtener la información:
Get-ADUser jioller
También podemos detallar la información que queremos obtener, para ello, tendremos que usar el modificador “-Properties”, pudiendo ser seguido de un “*” para mostrar toda la información o de los campos que nos interesen.
Get-ADUser jioller -Properties *
Get-ADUser jioller -Properties CN, UserPrincipalName, whenCreated, whenChanged
Consultamos información de usuarios dado de alta dentro de nuestro AD DS
Otra consulta interesante para realizar puede ser la de obtener el número de usuarios dados de alta en el dominio, que puede servirnos para hacer una “auditoría” rápida de si ha habido nuevas altas de las que no tengamos conocimiento. El comando es bastante sencillo, básicamente consiste en lanzar una consulta de los usuarios del dominio con el comando “Get-ADUser -Filter *” y la salida contarla con “().count”
(Get-ADUser -Filter *).count
NOTA: Debemos tener siempre presente que PowerShell es mucho más que una línea de comandos convencional y que trabaja con objetos por lo que las opciones son casi infinitas.
Consultamos el número de usuarios en el dominio
Alta y baja de usuarios:
Dar de alta y de baja usuarios de un dominio es algo bastante común y que debemos tener controlado para ahorrar el mayor tiempo posible.
Aunque lo más común es que hagamos cargas masivas cuando trabajemos desde PowerShell, en este caso vamos a ver como cargar un usuario a mano, para poner más adelante como hacer las cargas automáticas.
Para hacer la carga del usuario debemos añadir la contraseña inicialmente, ya que no se puede introducir directamente en el comando, donde deberemos sustituir <CONTRASEÑA> por la password que hayamos elegido.
$userpassword=ConvertTo-SecureString -AsPlainText -Force -String <CONTRASEÑA>
Una vez hecho esto se podrá lanzar el comando “New-ADUser” que puede ser tan sencillo como se ve a continuación:
New-ADUser -Name jioller2 -AccountPassword $userpassword
O se le pueden añadir algunos parámetros como una descripción o la habilitación de la cuenta nada más desplegarla, cosa que por otro lado no debería ser necesario, pero así nos aseguramos de que todo vaya bien:
New-ADUser -Name jioller2 -Description «Segunda Cuenta de Nacho» -Enabled $true -AccountPassword $userpassword
Añadimos un nuevo usuario a mano y comprobamos el alta
Ahora que sabemos dar de alta usuarios deberemos saber cómo eliminarlos para poder realizar estos dos trámites de manera puntual. El comando usado es “Remove-LocalUser” y basta con poner el comando seguido de la cuenta a eliminar para que lo realice, sin más complicaciones.
De esta manera, el comando a ejecutar para eliminar el usuario “jioller2” sería:
Remove-LocalUser jioller2
Aquí aprovechamos para mostrar un comando de consulta en el que vamos a filtrar los resultados para que se mostrar únicamente los usuarios que empiecen con una cadena en concreta, en este ejemplo “jio” y tengan después cualquier cadena de caracteres, mostrando únicamente su nombre:
Get-ADUser -Filter ‘Name -like «jio*»‘ | Select Name
Eliminamos un usuario de AD DS con PowerShell y comprobamos que todo ha ido bien
Alta y baja de usuarios de manera masiva:
Ahora vamos a ver como podemos automatizar la creación de usuarios, usando para ello un archivo de carga en formato “.csv”y un pequeño script que vaya leyendo el fichero línea por línea y cargando los usuarios uno por uno en base a la información que encuentra en cada línea.
Para hacer esto, tal como hemos comentado, debemos crear un archivo de usuarios y contraseñas con una estructura bastante simple, en la que cada línea es una entrada, o sea, un usuario y que se separa cada campo por una “,” (coma).
La estructura puede ser similar a la siguiente, donde la primera línea contiene el nombre de los campos con los que se va a operar y cada una de las siguientes contiene una entrada de usuario con el tándem “Usuario” y “Contraseña”.
user,password
usuario01,password01
usuario02,password02
…
A continuación, podemos ver el archivo que hemos generado y que contiene los usuarios que vamos a dar de alta en nuestro dominio.
Creamos el archivo de usuarios y contraseñas para la creación masiva de usuarios
Una vez salvado el archivo con extensión “.cvs”, tenemos que importarlo para que lo cargue el script, cosa que hacemos mediante el siguiente comando:
$listadeusuarios=Import-Csv -Path usuarios.csv
En este comando, realmente lo que hacemos es cargar la importación del archivo mediante “Import-Csv” y cargarlo desde la ruta descrita tras el “-Path”. Es importante que el comando sea ejecutado desde la misma ruta donde se encuentre el archivo, de lo contrario, en la ruta habrá que marcar la ruta relativa o absoluta, que podría ser cargada de la siguiente manera:
-Path C:\Users\administrador\Desktop\usuarios.csv
Una vez importado el archivo, deberemos lanzar la ejecución de la importación, cosa que haremos con el siguiente script. Es importante decir que este script es bastante sencillo y no es el único que se puede realizar para hacer estas importaciones, pudiendo ser mucho más elaborado y pudiendo cargar otros campos como el país, el mail, etc.
foreach ($i in $listadeusuarios)
{
$userpassword=ConvertTo-SecureString $i.password -AsPlainText -Force
New-LocalUser $i.user -Password $userpassword
}
Este comando, lo que hace es recorrer el archivo y por cada línea ejecutar un comando de creación de usuario (New-LocalUser). Además, debemos hacer especial foco en la expresión “$userpassword=ConvertTo-SecureString $i.password -AsPlainText -Force” que nos permite meter las contraseñas, ya que por defecto no permite meterlas.
Hacemos la importación masiva de usuarios a nuestro AD DS.jpg
Al lanzar esta alta de usuarios, se realizará en modo “verbose” o lo que es lo mismo, mostrando información sobre la ejecución, por lo que veremos un mensaje por usuario añadido, y si todo va bien, debería mostrar un “True” o cierto, que indica que la ejecución ha sido correcta.
En este caso, no vamos a hacer una introducción de usuarios más compleja, pero no descartamos añadirla próximamente.
Si lo que nos interesa es eliminar usuarios de manera masiva, podemos usar un archivo para pasar los usuarios que queremos eliminar, el archivo, deberá ser igualmente con formato “.csv”.
Este listado debería contener solo el nombre de los usuarios a eliminar en un formato como el siguiente:
user
usuario01
usuario02
…
Una vez creado el listado, tenemos que importarlo para que lo cargue el script, cosa que hacemos mediante el siguiente comando:
$listadeusuarios=Import-Csv -Path borradousuarios.csv
Ahora deberíamos lanzar el script para la eliminación de usuarios, que tiene un formato muy similar al de creación de usuarios masivos, aunque basado en el comando de eliminación de usuarios “Remove-LocalUser” y más sencillo ya que no debemos pasarle parámetros.
foreach ($i in $listadeusuarios)
{
Remove-LocalUser $i.user
}
Quedando la ejecución como se muestra en la siguiente captura.
Ejecutamos el script para eliminar usuarios de manera masiva
Cambios de contraseña:
Una tarea realmente importante, es la de poder cambiar o resetear las contraseñas de los usuarios de nuestra organización, y es algo que suele ocupar cierto tiempo de operación diario, al menos en las organizaciones con usuarios no avanzados o con mucha rotación de personal.
Para realizar esta tarea tenemos dos aproximaciones principales, en función de si conocemos la contraseña actual o no.
Si conocemos la contraseña actual lanzaremos el comando siguiente y el sistema responderá solicitando la contraseña actual:
Set-ADAccountPassword jioller
En caso de no conocer la contraseña anterior podemos lanzar el comando con el modificador “-Reset”:
Set-ADAccountPassword jioller -Reset
Probamos las dos formas de cambiar una contraseña
Desbloquear cuentas:
En caso de tener un usuario con la cuenta bloqueada, se puede hacer el desbloqueo de la cuenta mediante el uso del comando “unlock-ADAccount” seguido del nombre del usuario, y para tener algo de información de la tarea se le puede acompañar con el modificador “-Verbose”.
unlock-ADAccount jioller -Verbose
También existe la posibilidad de hacer una simulación mediante la ejecución del comando finalizado con el modificador «-WhatIf»
unlock-ADAccount jioller -WhatIf
Desbloqueamos un usuario y hacemos la simulación del desbloqueo de un usuario
Otras operaciones con usuarios:
En ocasiones podemos necesitar modificar los datos de un usuario, como por ejemplo darle una descripción, o añadirle el departamento al que pertenece, la ciudad, o tantos otros parámetros. Para hacer esto usaremos el comando “Set-ADUser”, y pasando el nombre de usuario y el parámetro a configurar.
Un ejemplo de esto podría ser el siguiente comando en el que al usuario “jioller” queremos añadirle una descripción:
Set-ADUser jioller -Description «Usuario de Nacho»
NOTA:Las descripciones tienen que ponerse entre paréntesis para evitar problemas, sobre todo si contienen espacios en blanco.
Modificamos y comprobamos la descripción y ciudad de un usuario
Gestión de Grupos:
No queremos cerrar el artículo sin ver algunos temas relativos a grupos de usuarios dentro de AD DS. En este caso vamos a ver tres pequeñas operaciones que podemos hacer con los grupos y los usuarios asociados a ellos.
Para empezar, como es habitual en nuestros artículos, vamos a ver como extraer información de un grupo. Para ver los datos relativos a un grupo en concreto tan solo tenemos que usar el comando “Get-ADGroup” pasándole como parámetro el nombre de grupo sobre el que queremos dicha información. Con lo que una consulta de grupo quedaría de la siguiente manera:
Get-ADGroup «GrupoPrueba»
No siendo necesario incluir las comillas (“) tal como se puede ver en la captura.
Consultamos información sobre un grupo de AD DS
Otra de las tareas que podemos realizar es comprobar los usuarios que pertenecen a un grupo en concreto, mostrando información como el nombre, el tipo de objeto o su SID. Para realizar esta consulta se deberá lanzar el comando “Get-ADGroupMember” pasándole como parámetro el nombre del grupo sobre el que quieres obtener dicha información.
Get-ADGroupMember «GrupoPrueba»
Listamos la información sobre los usuarios pertenecientes a un grupo
Otra de las tareas típicas es agregar un usuario a un grupo ya existente mediante el uso del comando “Add-ADGroupMember” seguido del grupo al que se quiere añadir el usuario y por último el usuario a agregar. En este punto, debemos tener en cuenta que usa el SamAccountName.
Add-ADGroupMember «GrupoPrueba» jioller
Agregamos un usuario a un grupo existente mediante comandos de PowerShell
Por desgracia, el tamaño de este artículo no puede alargarse indefinidamente ya que terminaría siendo un monstruo que probablemente no revisaría hasta el final, por lo que lo dejamos aquí, e iremos ampliándolo en otros artículos, con pequeños trucos o con la gestión de otros objetos y por supuesto, dedicando un artículo a la gestión de Políticas de Grupo (GPO) y otro para las Políticas de Contraseñas Granulares (PSO).
Conclusiones y análisis sobre AD DS server
Nuevamente, debemos decir que este no es el tutorial definitivo de gestión de usuarios de AD DS Server mediante powerShell, ya que podríamos dar muchos más comandos, pero creemos que con este artículo se proporcionan unos cuantos comandos realmente útiles para la gestión básica.
Con lo que aquí se ha expuesto podemos empezar a administrar el AD DS, al menos en lo que respecta a los objetos (usuarios y grupos) comenzando por las tareas de creación de usuarios, eliminación de los mismos, gestiones básicas, etc.
Como siempre, os recomendamos revisar PowerShell ya que su potencial es ilimitado y se puede utilizar para gestionar de manera eficiente toda la infraestructura de Microsoft, tanto clientes, como servidores y servicios, y ciertos elementos GNU/Linux.