A medida que una organización crece, también lo hace su entorno de Active Directory (AD) y su infraestructura de Directiva de Grupo (GP). Los Objetos de Directiva de Grupo (GPO) pueden volverse inmanejables rápidamente y, antes de que te des cuenta, te encontrarás con docenas de GPO no vinculados que desordenan tu entorno. Vamos a cambiar eso.
En este tutorial, aprenderás cómo descubrir todos esos GPO no vinculados tanto con la Consola de Administración de Directivas de Grupo (GPMC) como con PowerShell.
¡Empecemos!
Requisitos previos
Este artículo será un tutorial con ejemplos prácticos. Si deseas seguirlo, asegúrate de tener:
- Un dominio de Active Directory. Este artículo utilizará un dominio llamado HomeLab.Local.
- A Windows computer joined to the AD domain. This tutorial will use Windows 10.
- El equipo con Windows tiene instalado el paquete de Herramientas de Administración Remota del Servidor (RSAT).
¿De dónde provienen los GPO no vinculados?
Cuando creas una GPO y defines todas las configuraciones que pretendes aplicar a las computadoras cliente, esa GPO en realidad no está haciendo nada. Para afectar realmente a las computadoras cliente, la GPO debe estar vinculada a una unidad organizativa (OU) en el Directorio Activo (AD).
Con el tiempo, a medida que más administradores crean GPO, olvidan vincularlas, desvinculan GPO de OUs, tienen la intención de eliminarlas pero nunca lo hacen, las GPO simplemente quedan allí sin hacer nada y pueden proliferar. Especialmente en organizaciones grandes, las GPO no vinculadas pueden llegar a ser cientos si no se mantienen adecuadamente.
Buscar GPO no vinculadas en el GPMC
Puedes encontrar GPO no vinculadas de dos maneras: a través del GPMC o mediante PowerShell. Si solo tienes un puñado de GPO no vinculadas, puede tener sentido usar el GPMC en lugar de crear un script de PowerShell.
Para encontrar GPO no vinculadas a través del GPMC:
1. Abre el GPMC yendo al menú de inicio y escribiendo “gestión de directivas de grupo”. Cuando aparezca el programa GPMC, ábrelo.
2. En el GPMC, ve a Bosque: <tu nombre de bosque —> Dominios —> <tu nombre de dominio>, haz clic derecho en el nombre de dominio y selecciona Buscar. Esta acción abrirá la ventana de diálogo Buscar objetos de directiva de grupo.

3. Haz clic en el menú desplegable Buscar elemento y selecciona los enlaces GPO. Este elemento de búsqueda buscará los GPO que están vinculados a una OU. Cambia el menú desplegable Condición a Existente en y el dominio a tu dominio.
En la captura de pantalla siguiente, la combinación de estos ajustes buscará todos los GPO vinculados a al menos una OU en el dominio homelab.local.
Cuando hayas terminado, haz clic en Agregar para añadir el criterio. Aparecerá bajo la sección Todos los criterios de búsqueda.

4. Ahora, haz clic en el botón Buscar para encontrar todos los GPO que coincidan con los criterios de búsqueda.

5. Como se muestra en la captura de pantalla siguiente, solo se muestran los GPO vinculados en los resultados de la búsqueda.

6. Para encontrar los GPO no vinculados, compara manualmente todos los GPO con los GPO vinculados como se muestra a continuación. En la captura de pantalla siguiente, solo tres GPO están vinculados. Al mirar bajo el nodo Objetos de directiva de grupo, puedes ver que dos de los GPO no aparecen (GPO no vinculado 1 y GPO no vinculado 2). Eso significa que no están vinculados.
Esta tarea llevará tiempo y por eso verás cómo realizar esta tarea mediante PowerShell en la siguiente sección.

Los GPO vinculados tendrán un vínculo cuando estén asignados a un objeto AD como OU, como se muestra a continuación. Si solo tienes unos pocos GPO, puedes buscar los GPO que tienen un vínculo y los que no tienen un vínculo. Los GPO que no tienen un vínculo son los GPO no vinculados.

Encontrar GPO no vinculados con PowerShell
Revisar los GPO en el GPMC puede funcionar para algunos GPO, pero tendrás dificultades si tienes cientos o miles de GPO gestionando miles de puntos finales. En ese caso, es hora de automatizar este proceso y construir una práctica herramienta de PowerShell.
Suponiendo que estás en tu PC Windows local unido al dominio con RSAT instalado:
1. Abre una consola de Windows PowerShell.
2. Importa el módulo GroupPolicy. El módulo GroupPolicy viene con RSAT y debería estar instalado en tu sistema. Este módulo contiene todos los comandos necesarios para trabajar con GPOs en PowerShell.
3. Ejecuta el cmdlet de PowerShell Get-GPO
usando el parámetro All
. Este cmdlet consulta AD y devuelve todos los GPO encontrados.

4. Ahora que puedes consultar todos los GPOs en el dominio, debes averiguar cuáles están desvinculados. Para hacerlo, ejecuta el cmdlet Get-GPOReport
. Este cmdlet te permite proporcionar un nombre y un tipo de salida para devolver.
Copia y pega manualmente uno de los nombres de GPO encontrados en el paso anterior y ejecuta este comando. Verás que el cmdlet devuelve un informe XML de todos los ajustes que tiene el GPO. En particular, observa la sección llamada LinksTo
, como se muestra a continuación. Esta sección contiene el nodo XML SOMPath
que representa la ruta a la OU a la que está vinculado.

El cmdlet
Get-GPOReport
solo puede obtener un informe para un único GPO a la vez. Este cmdlet solo incluye resultados de búsqueda de dominios y no de sitios de AD.
5. Ahora que sabes cómo encontrar todos los GPO con Get-GPO
y el cmdlet para descubrir a qué están vinculados (Get-GPOReport
), combínalos copiando y pegando el comando de PowerShell a continuación en tu consola.
El comando a continuación consulta todos los GPO en el dominio (Get-GPO
) y luego genera un informe XML para cada uno de ellos (Get-GPOReport
), solo permitiendo que se devuelvan aquellos que no tienen una cadena <LinksTo>
en el informe (Select-String
).
En el entorno del tutorial, puedes ver en el siguiente ejemplo que UnlinkedGPO1 y UnlinkedGPO2 no están vinculados a ningún OU.

Creando una herramienta de PowerShell para GPOs no vinculados
Ahora pongamos todo lo que has aprendido juntos y construyamos un script de PowerShell que podrías usar en el mundo real.
1. Abre tu editor de código favorito y copia/pega el siguiente script de PowerShell en él. Guarda el script como Remove-UnlinkedGPO.ps1. Este script:
- Crea una carpeta con la fecha actual para almacenar informes de GPO no vinculados.
- Encuentra todos los GPOs en AD que no están vinculados.
- Crea un informe HTML para cada GPO no vinculado y lo guarda en disco.
- Crea y agrega a un archivo de texto una lista de todos los GPOs no vinculados.
- Elimina cada GPO no vinculado con un paso de confirmación utilizando el cmdlet
Remove-GPO
.
También puedes descargar el script Remove-UnlinkedGPO.ps1 desde GitHub.
2. Ejecuta el script Remove-UnlinkedGPO.ps1.
3. Si se encuentra un GPO no vinculado, el script te pedirá que lo elimines. Esta solicitud proviene del cmdlet Remove-GPO
utilizando el interruptor Confirm
. Para confirmar la eliminación de ese único GPO, haz clic en Sí; de lo contrario, haz clic en Sí para Todos para eliminar todos los GPO no vinculados sin más confirmaciones.

Después de que el script esté completo y haya encontrado al menos un GPO no vinculado, deberías ver en la carpeta C:\GPOBackup\<fecha> el contenido del GPO como una carpeta GUID junto con los informes HTML y el archivo UnlinkedGPOs.txt.

4. Ahora, abre uno de los informes HTML del GPO con un navegador web. Puedes ver que el informe contiene todas las configuraciones definidas en ese GPO. En el ejemplo a continuación, el GPO UnlinkedGPO1 contiene configuraciones para la directiva de ejecución de PowerShell.

5. Por último, abre el archivo UnlinkedGPOs.txt. Verás que contiene la misma salida que recibiste del cmdlet Get-GPO
.

Conclusión
Ahora deberías saber cómo encontrar todos esos GPO no vinculados en tu entorno de AD usando GPMC y PowerShell.
¿Qué método prefieres? ¿Puedes pensar en una forma de mejorar el script de PowerShell cubierto?