# Automatización para Extraer Información Clave de Políticas de Grupo (GPO) desde Archivos XML y Exportarla a CSV

- Link: https://binariocero.com/windows/automatizacion-para-extraer-informacion-clave-de-politicas-de-grupo-gpo-desde-archivos-xml-y-exportarla-a-csv
- Published: 2025-06-14T23:43:00+02:00
- Author: Juan José Fernández Durán

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

    ```wp-block-code
    # Ruta del directorio con los archivos XML de GPO
    $directorio = "C:\GPOs_Reportes_xml"

    # Salida del CSV
    $salidaCSV = "$directorio\gpos_exportadas.csv"

    # Crear lista para guardar resultados
    $resultados = @()

    # Procesar cada archivo XML en el directorio (con subcarpetas)
    Get-ChildItem -Path $directorio -Filter *.xml -Recurse | ForEach-Object {
        $archivo = $_.FullName
        try {
            [xml]$xml = Get-Content $archivo

            $dominio = $xml.GPO.Identifier.Domain.'#text'
            $nombreGPO = $xml.GPO.Name

            # --- Corrección para obtener Owner con namespaces ---
            $nsManager = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
            $nsManager.AddNamespace("gp", "http://www.microsoft.com/GroupPolicy/Types/Security")
            $nsManager.AddNamespace("gpTypes", "http://www.microsoft.com/GroupPolicy/Types")

            $ownerNameNode = $xml.SelectSingleNode("//gp:Owner/gpTypes:Name", $nsManager)
            $owner = if ($ownerNameNode) { $ownerNameNode.InnerText } else { "Desconocido" }

            $activoMaquina = $xml.GPO.Computer.Enabled
            $activoUsuario = $xml.GPO.User.Enabled

            $politicasActivas = @()

            if ($xml.GPO.Computer.ExtensionData) {
                foreach ($ext in $xml.GPO.Computer.ExtensionData.Extension.Policy) {
                    if ($ext.State -eq "Enabled") {
                        $politicasActivas += $ext.Name
                    }
                }
            }

            if ($xml.GPO.User.ExtensionData) {
                foreach ($ext in $xml.GPO.User.ExtensionData.Extension.Policy) {
                    if ($ext.State -eq "Enabled") {
                        $politicasActivas += $ext.Name
                    }
                }
            }

            $activaPolitica = if ($politicasActivas.Count -gt 0) { "Si" } else { "No" }

            # --- Extraer info de LinksTo ---
            $linkada = "No"
            if ($xml.GPO.LinksTo) {
                if ($xml.GPO.LinksTo.Enabled -and $xml.GPO.LinksTo.Enabled -eq "true") {
                    $linkada = "Si"
                }
            }

            # Concatenar políticas activas en una sola cadena
            $politicasConcatenadas = $politicasActivas -join ", "

            # Guardar resultado como objeto
            $resultados += [PSCustomObject]@{
                Dominio           = $dominio
                NombreGPO         = $nombreGPO
                ActivaLaPolitica  = $activaPolitica
                ActivoUsuario     = $activoUsuario
                ActivoMaquina     = $activoMaquina
                OwnerPolitica     = $owner
                Linkada           = $linkada
                PoliticasActivas  = $politicasConcatenadas
            }
        }
        catch {
            Write-Warning "Error procesando ${archivo}: $($_.Exception.Message)"
        }
    }

    # Exportar a CSV
    $resultados | Export-Csv -Path $salidaCSV -NoTypeInformation -Encoding UTF8

    Write-Output "Exportado a: $salidaCSV"
    ```

En entornos empresariales que utilizan Active Directory, las Políticas de Grupo (
Group Policy Objects o GPO) son esenciales para la gestión centralizada de configuraciones
y seguridad tanto de usuarios como de equipos. Sin embargo, cuando se manejan múltiples
GPOs y se exportan sus configuraciones en formato XML, resulta complejo revisar 
manualmente cada archivo para obtener un panorama general.

Este script en PowerShell está diseñado para automatizar la extracción de información
relevante de los archivos XML de GPOs y consolidarla en un informe CSV. Esto facilita
el análisis y la auditoría de políticas activas, propietarios, estado y enlaces 
de cada GPO, ahorrando tiempo y reduciendo errores humanos.

**¿Cómo funciona el script?**

 1. **Definición del directorio:** Se especifica la ruta donde se encuentran almacenados
    los archivos XML que contienen la configuración exportada de las GPOs.
 2. **Recorrido de archivos XML:** El script busca recursivamente todos los archivos
    con extensión `.xml` dentro del directorio y sus subcarpetas.
 3. **Lectura y análisis XML:** Por cada archivo, se carga el contenido en formato 
    XML para extraer datos específicos:
 4.  * Dominio al que pertenece la GPO.
     * Nombre de la política.
     * Propietario (owner) de la GPO, accediendo a nodos con namespaces específicos
       para evitar problemas de lectura.
     * Estado de activación de las políticas tanto para el equipo como para el usuario.
     * Listado de políticas activas dentro de las configuraciones para usuarios y máquinas.
     * Estado de si la política está vinculada a alguna unidad organizativa o contenedor(
       linksTo).
 5. **Consolidación de datos:** Los valores extraídos se organizan en objetos personalizados
    que se almacenan en una lista para su posterior exportación.
 6. **Exportación a CSV:** Finalmente, todos los datos recopilados se exportan a un
    archivo CSV, que puede abrirse fácilmente con Excel o cualquier visor de hojas 
    de cálculo para su análisis.

**Beneficios de usar este script:**

 * **Rapidez:** Procesa cientos de archivos XML sin intervención manual.
 * **Claridad:** Presenta un resumen claro de las políticas activas y su configuración.
 * **Auditoría:** Permite revisar propietarios y estados para detectar posibles 
   problemas o inconsistencias.
 * **Escalabilidad:** Puede adaptarse para incluir más campos o trabajar en otros
   formatos.

En resumen, esta herramienta es un recurso valioso para administradores de sistemas
que necesiten gestionar grandes entornos de Active Directory, facilitando la revisión
y documentación de sus políticas de grupo de forma automatizada y eficiente.
