En entornos empresariales gestionados mediante Active Directory, es fundamental mantener un control y documentación clara de las Group Policy Objects (GPOs). Ya sea para auditorías, respaldo, o simplemente para tener una visión detallada de la configuración del dominio, generar reportes de GPO es una tarea habitual para administradores de sistemas.
A continuación, te presentamos un script de PowerShell que automatiza la exportación de todos los reportes de GPO en formato XML desde un dominio especificado, y los guarda en una carpeta local. El script es sencillo, efectivo y fácilmente personalizable para adaptarse a cualquier entorno.
# Definir el dominio (puede ser FQDN como ejemplo.local o NetBIOS como EJEMPLO)
$Dominio = "ejemplo.local"
# Ruta de destino donde guardar los reportes XML
$RutaDestino = "C:\ReportesGPOs"
# Crear carpeta si no existe
if (!(Test-Path -Path $RutaDestino)) {
New-Item -ItemType Directory -Path $RutaDestino
}
# Obtener todas las GPOs del dominio especificado
$GPOs = Get-GPO -All -Domain $Dominio
# Generar reportes XML para cada GPO
foreach ($GPO in $GPOs) {
$NombreLimpio = ($GPO.DisplayName -replace '[\\/:*?"<>|]', '_') # Evitar caracteres inválidos en nombres de archivo
$RutaReporte = Join-Path -Path $RutaDestino -ChildPath "$NombreLimpio.xml"
Get-GPOReport -Guid $GPO.Id -ReportType Xml -Path $RutaReporte -Domain $Dominio
}
Write-Output "Todos los reportes XML han sido generados en: $RutaDestino"
Descripción del Script
Este script realiza los siguientes pasos:
- Define el dominio del que se extraerán las GPOs.
Puedes especificar un FQDN comoejemplo.local
o un nombre NetBIOS comoEJEMPLO
.$Dominio = "ejemplo.local"
- Define la ruta de destino donde se guardarán los archivos XML.
Si la carpeta no existe, el script la crea automáticamente.$RutaDestino = "C:\ReportesGPOs" if (!(Test-Path -Path $RutaDestino)) { New-Item -ItemType Directory -Path $RutaDestino }
- Obtiene todas las GPOs del dominio especificado.
Se utiliza el cmdletGet-GPO -All
.$GPOs = Get-GPO -All -Domain $Dominio
- Genera un archivo XML por cada GPO.
- El nombre del archivo se limpia para evitar caracteres inválidos.Se genera el reporte usando
Get-GPOReport
.
foreach ($GPO in $GPOs) { $NombreLimpio = ($GPO.DisplayName -replace '[\\/:*?"<>|]', '_') $RutaReporte = Join-Path -Path $RutaDestino -ChildPath "$NombreLimpio.xml" Get-GPOReport -Guid $GPO.Id -ReportType Xml -Path $RutaReporte -Domain $Dominio }
- El nombre del archivo se limpia para evitar caracteres inválidos.Se genera el reporte usando
- Imprime un mensaje de confirmación al finalizar.
Write-Output "Todos los reportes XML han sido generados en: $RutaDestino"
¿Por qué usar este script?
- Automatización total: No necesitas generar manualmente los reportes uno por uno.
- Formato legible y exportable: El formato XML facilita su análisis o integración con herramientas externas.
- Adaptable a cualquier entorno de dominio.
- Evita errores comunes: Como nombres de archivo inválidos por caracteres especiales.
Requisitos
- PowerShell con los módulos de GroupPolicy instalados.
- Permisos administrativos en el dominio.
- Conectividad con el controlador de dominio correspondiente.
Este tipo de scripts es ideal para integrarlo en tareas programadas (Task Scheduler) para generar respaldos periódicos de las políticas de grupo, ayudando a mantener una postura de seguridad robusta y documentación actualizada del entorno de TI.
Compartir: