# 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?
- Definición del directorio: Se especifica la ruta donde se encuentran almacenados los archivos XML que contienen la configuración exportada de las GPOs.
- Recorrido de archivos XML: El script busca recursivamente todos los archivos con extensión
.xml
dentro del directorio y sus subcarpetas. - Lectura y análisis XML: Por cada archivo, se carga el contenido en formato XML para extraer datos específicos:
- 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).
- Consolidación de datos: Los valores extraídos se organizan en objetos personalizados que se almacenan en una lista para su posterior exportación.
- 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.