La gestión de Active Directory (AD) es una de las principales responsabilidades de los administradores de TI, y un aspecto crucial de ese rol implica el control de la actividad de los usuarios, la auditoría de los cambios y la elaboración de informes precisos y en tiempo real con fines de cumplimiento. Para muchos equipos de TI, PowerShell sigue siendo la herramienta preferida tanto para la gestión de AD como para la elaboración de informes. Desde el control de los inicios de sesión de los usuarios y la supervisión de la pertenencia a grupos hasta el análisis de la actividad de los usuarios de Microsoft 365, PowerShell ofrece la flexibilidad y la precisión necesarias para mantener un entorno de AD seguro, conforme a las normativas y bien gestionado.
Aunque PowerShell ofrece potentes funciones para estas tareas, también presenta varios retos. La creación y el mantenimiento de scripts complejos puede llevar mucho tiempo y exigir conocimientos avanzados de scripts. Además, PowerShell carece de funciones centralizadas de generación de informes, lo que aumenta el riesgo de error humano y las posibles brechas de seguridad. ADManager Plus, una solución de informes de AD, ofrece informes de usuarios de AD predefinidos que proporcionan una visibilidad completa de los usuarios de AD con solo unos clics, eliminando la necesidad de complejos scripts.
Comprender los principales cmdlets de PowerShell es el primer paso para dominar los informes de AD. He aquí algunos comandos fundamentales que utilizará con frecuencia:
He aquí una colección de scripts esenciales de AD PowerShell que pueden ayudarle a gestionar y elaborar informes sobre su entorno de usuarios de forma efectiva.
Este script básico es vital para la auditoría de línea de base, la limpieza de directorios o la migración de datos de usuario. Recupera una lista completa de todos los usuarios de AD junto con sus propiedades clave, y también exporta los usuarios de AD a un CSV para facilitar su análisis.
Get-ADUser -Filter * -Properties * |
Select-Object Name, sAMAccountName, userPrincipalName, Enabled, department, title, LastLogonDate |
Export-Csv -Path "C:\AllADUsers.csv" -NoTypeInformationAunque encontrar usuarios deshabilitados es clave para la limpieza, obtener una lista de todas las cuentas activas y habilitadas es esencial para la gestión diaria, las auditorías de licencias y el establecimiento de la base de seguridad. Este script filtra todas las cuentas de usuario que están actualmente habilitadas y listas para su uso.
Get-ADUser -Filter 'Enabled -eq $true' -Properties DisplayName, sAMAccountName, LastLogonDate | Select-Object name, displayName, sAMAccountName, LastLogonDate | Export-Csv -Path "C:\Reports\EnabledUsers.csv" -NoTypeInformationIdentificar las cuentas inactivas es una medida de seguridad crítica para evitar accesos no autorizados y mantener un entorno de AD limpio. Este script ayuda a localizar a los usuarios que no han iniciado sesión durante un periodo determinado.
$InactiveDays = 90$InactiveDate = (Get-Date).AddDays(-$InactiveDays)
Get-ADUser -Filter {LastLogonDate -lt $InactiveDate Enabled -eq $true} -Properties LastLogonDate | Select-Object Name, sAMAccountName, LastLogonDateLas cuentas desactivadas, si no se gestionan adecuadamente, pueden suponer un riesgo para la seguridad o indicar la existencia de antiguos empleados que aún tienen una presencia persistente en el directorio. Este script le ayuda a obtener rápidamente todos los usuarios de AD deshabilitados, proporcionando su nombre, sAMAccountName, y su estado habilitado para una clara identificación.
Get-ADUser -Filter {Enabled -eq $false} -Properties Name, sAMAccountName, Enabled | Select-Object Name, sAMAccountName, EnabledUtilice este script para buscar cuentas de usuario temporales o por contrato que hayan superado su fecha de caducidad establecida. Esto es diferente de una cuenta deshabilitada y es útil para limpiar cuentas que ya no deberían tener acceso.
Search-ADAccount -AccountExpired | Select-Object Name, sAMAccountName, AccountExpirationDate | Export-Csv -Path "C:\Reports\ExpiredAccounts.csv" -NoTypeInformationEl control de la última fecha de inicio de sesión de los usuarios de AD es una práctica esencial para la auditoría de seguridad, la identificación de cuentas inactivas y el mantenimiento de un directorio de usuarios limpio. Este script PowerShell del inicio de sesión de usuario de AD recupera la última marca de tiempo del inicio de sesión de todos los usuarios, proporcionando su nombre, sAMAccountName, y la última fecha de inicio de sesión.
Get-ADUser -Filter * -Properties LastLogonDate |
Select-Object Name, sAMAccountName, LastLogonDate |
Export-Csv -Path "C:\ADUserLogonReport.csv" -NoTypeInformationGenerar informes sobre los permisos de los usuarios de AD es esencial para auditar el acceso de los usuarios y garantizar una postura de seguridad de mínimos privilegios. Este script PowerShell de los permisos de usuario de AD recupera los permisos que un usuario tiene en una unidad organizativa (OU) específica.
$OUPath = "OU=Sales,DC=yourdomain,DC=com"
Get-Acl -Path"AD:\$OUPath" | Select-Object-ExpandProperty Access | Select-Object IdentityReference, ActiveDirectoryRights, AccessControlType, ObjectType, InheritanceType, IsInherited | Export-Csv-Path"C:\Reports\OUPermissions.csv"-Por razones de seguridad, muy pocas cuentas deberían tener sus contraseñas configuradas para no caducar nunca. Este script identifica todas las cuentas de usuario que tienen activado este indicador:
Get-ADUser -Filter * -Properties name, PasswordNeverExpires | Where-Object {$_.PasswordNeverExpires -eq $true} | Select-Object name, sAMAccountName, distinguishedName | Export-Csv -Path "C:\Reports\PwdNeverExpires.csv" -NoTypeInformationA veces basta con encontrar rápidamente los datos de un único usuario sin tener que navegar por la interfaz Active Directory Users and Computers. Este script le permite encontrar un usuario específico por su sAMAccountName y recuperar todas sus propiedades:
$Username = "JohnDoe"
Get-ADUser -Identity $Username -Properties *Para el organigrama, las estructuras de informes o los flujos de trabajo de aprobación, a menudo se necesita una lista de usuarios y sus gestores directos. Este script recupera los usuarios e incluye el nombre de su gestor en el informe.
Get-ADUser -Filter * -Properties displayName, manager | Select-Object name, displayName, @{Name="Manager";Expression={(Get-ADUser $_.Manager).Name}} | Export-Csv -Path "C:\Reports\UsersWithManagers.csv" -NoTypeInformationSi tiene el nombre completo de un usuario, pero necesita su sAMAccountName, este script proporciona una forma rápida de buscarlo.
$DisplayName = "John Doe"
Get-ADUser - Filter "displayName -eq '$displayName'" | Select-Object name, sAMAccountNameEn entornos de AD complejos, los usuarios pueden estar repartidos en varias OU. Este script demuestra cómo apuntar a múltiples OU y consolidar la lista de usuarios en un único informe.
Get-ADUser-Filter * -SearchBase$OU-Properties displayName | Select-Object name, displayName, distinguishedName } $AllUsers | Export-Csv-Path"C:\Reports\MultiOUUsers.csv"-NoTypeInformationEl filtrado de usuarios por departamento es un requisito habitual para crear listas de distribución o informes específicos de un departamento. Este script recupera todos los usuarios que tienen un valor específico en su atributo de departamento.
$Department = "Finance"
Get-ADUser -Filter "department -eq '$department'" -Properties displayName, department | Select-Object name, displayName, sAMAccountName, department | Export-Csv -Path "C:\Reports\FinanceDepartmentUsers.csv" -NoTypeInformationPara la integridad de los datos y la limpieza de AD, es útil encontrar usuarios a los que les falta información importante, como un número de teléfono o una dirección de correo electrónico. Este script encuentra todos los usuarios en los que el atributo TelephoneNumber no está establecido. Puede cambiar el atributo por el que necesite comprobar.
Get-ADUser-Filter * -Properties telephoneNumber | Where-Object {-not $_.TelephoneNumber} | Select-Object name, sAMAccountName, distinguishedName | Export-Csv-Path"C:\Reports\UsersWithEmptyPhone.csv"-NoTypeInformationAunque name y displayName son los atributos de nombre más utilizados, a veces es necesario encontrar a un usuario basándose en su Common-Name (CN), que forma parte de su nombre distinguido. Este script muestra cómo filtrar usuarios basándose en el CN.
$CN = "John Doe"
Get-ADUser -Filter "cn -eq '$cn'" | Select-Object Name, sAMAccountName, distinguishedNameA pesar de su potencia, confiar únicamente en los scripts para AD de PowerShell para la elaboración de informes exhaustivos puede presentar varios retos:
ADManager Plus es una completa herramienta de generación de informes de AD diseñada para simplificar la gestión y generación de informes de AD, Exchange, Microsoft 365 y Google Workspace. Dispone de las siguientes funciones:
Puede utilizar el cmdlet Get-ADUser con el parámetro -Filter * para obtener todos los usuarios.