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

- Link: https://binariocero.com/windows/automatiza-la-exportacion-de-reportes-gpo-en-xml-con-powershell
- Published: 2025-06-14T21:34:00+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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.

    ```wp-block-code
    # 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.**
 5.  * El nombre del archivo se limpia para evitar caracteres inválidos.Se genera el
       reporte usando `Get-GPOReport`.
 6. 
    `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}`
 7. **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.
