contar_equipos_por_ou_en_active_director
This is an old revision of the document!
Table of Contents
KB: Contar equipos por OU en Active Directory
Problema
Necesitamos saber cuántos equipos hay en cada sub-OU dentro de un contenedor, por ejemplo:
- OU=Equipos WSUS
- OU=Windows 10
- OU=Windows 11
Entorno
- Active Directory
- PowerShell con módulo ActiveDirectory instalado
- Usuario con permisos de lectura en AD
Solución
Ejecutar en PowerShell:
Import-Module ActiveDirectory Get-ADComputer -SearchBase "OU=Equipos WSUS,DC=bio4,DC=local" -Filter * | Group-Object { ($_).DistinguishedName -split ',' | Where-Object { $_ -like 'OU=*' } | Select-Object -First 1 } | Select-Object @{Name='OU';Expression={ $_.Name -replace '^OU=' }}, Count
Ejemplo de salida
OU Count -- ----- Windows 10 15 Windows 11 23
Explicación
- Get-ADComputer con `-SearchBase` limita la búsqueda a la OU deseada.
- DistinguishedName contiene toda la ruta en AD (CN, OU, DC).
- Al hacer `-split ','` separamos en bloques; filtramos los que empiezan con `OU=`.
- `Select-Object -First 1` toma la primera OU debajo de la raíz buscada.
- Group-Object agrupa por esa OU y cuenta objetos.
Variantes
Contar solo equipos habilitados:
Get-ADComputer -SearchBase "OU=Equipos WSUS,DC=bio4,DC=local" -Filter 'Enabled -eq $true' | ...
Listar además los nombres de los equipos por OU:
Get-ADComputer -SearchBase "OU=Equipos WSUS,DC=bio4,DC=local" -Filter * | Group-Object { ($_).DistinguishedName -split ',' | Where-Object { $_ -like 'OU=*' } | Select-Object -First 1 } | ForEach-Object { Write-Output "OU: $($_.Name)" $_.Group | Select-Object -ExpandProperty Name Write-Output "" }
Notas
- El módulo ActiveDirectory se instala con RSAT en Windows 10/11, o ya está en servidores AD.
- Ajustar el SearchBase al DN de la OU principal.
- Si hay más niveles de sub-OUs, puede ser necesario modificar la parte del `split` para agrupar correctamente.
contar_equipos_por_ou_en_active_director.1759501020.txt.gz · Last modified: 2025/10/03 14:17 by oso
