Inicio » Windows » Automatiza la Exportación de Reportes GPO en XML con PowerShell

Automatiza la Exportación de Reportes GPO en XML con PowerShell

Loading

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:

  1. Define el dominio del que se extraerán las GPOs.
    Puedes especificar un FQDN como ejemplo.local o un nombre NetBIOS como EJEMPLO.

    $Dominio = "ejemplo.local"
  2. 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 }
  3. Obtiene todas las GPOs del dominio especificado.
    Se utiliza el cmdlet Get-GPO -All.

    $GPOs = Get-GPO -All -Domain $Dominio
  4. 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 }
  5. 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.