Icono del sitio Binario 0

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

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

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?

Requisitos

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.

Salir de la versión móvil