3 votos

Filtro LDAP para miembros de un grupo

Estoy tratando de ejecutar un filtro LDAP para devolver todos los usuarios dentro de un grupo. Es bastante simple, y hay cientos de preguntas de Stack Overflow que ya proporcionan consultas de ejemplo. Sin embargo la que estoy usando es básica, y no devuelve nada cuando se ejecuta en Powershell.

Lo que he probado

Get-ADUser -LDAPFilter "(&(objectclass=user)(objectcategory=person)(memberOf=CN=MyGroup,OU=Users,DC=MyDomain,DC=com))"

También he probado con "CN=Usuarios" en lugar de "OU=Usuarios

Donde "MiGrupo" se encuentra en la OU:

"MiDominio" (Bosque) > "Usuarios" (OU) > "MiGrupo" (CN)

¿Alguna idea de lo que estoy haciendo mal, y por qué no se devuelve ninguno de los 100-200 miembros del "MiGrupo"?

0 votos

La consulta debería funcionar. Si pega esto en una búsqueda personalizada en Usuarios y Equipos de AD, ¿se obtiene algún resultado? (&(objectclass=user)(objectcategory=person)(memberOf=CN=MyGr‌​oup,OU=Users,DC=MyDo‌​main,DC=com)) Confirme también que los miembros son objetos de usuario.

2voto

Adam Haile Puntos 58

Lo primero que haría es comprobar que el DN del grupo con el que intentas coincidir es realmente correcto. Normalmente haría algo como esto:

(Get-ADGroup MyGroup).distinguishedName

# optionally, save it to a variable
$groupDN = (Get-ADGroup MyGroup).distinguishedName

Get-ADUser limitará los resultados a los objetos de usuario por sí mismo, por lo que puedes omitir las partes objectclass/objectcategory del filtro LDAP y sólo incluir la parte memberOf. Puedes usar la variable DN que establecimos antes de esta manera:

Get-ADUser -LDAPFilter "(memberOf=$groupDN)"

Lo importante de esta consulta en particular es que sólo devolverá los usuarios que son miembros directos del grupo. No devolverá los miembros anidados. Por lo tanto, si uno de los miembros del grupo es otro grupo, los miembros de ese segundo grupo no aparecerán en los resultados sin un esfuerzo adicional. Puedes obtener esos miembros anidados ajustando el filtro de la siguiente manera:

Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$groupDN)"

Ese loco número punteado en el medio es un OID llamado LDAP_MATCHING_RULE_IN_CHAIN . De los documentos:

El LDAP_MATCHING_RULE_IN_CHAIN es un OID de regla de correspondencia que está diseñado para proporcionar un método para buscar la ascendencia de un objeto. Muchas aplicaciones que utilizan AD y AD LDS suelen trabajar con datos jerárquicos, que están ordenados por relaciones padre-hijo. Anteriormente, las aplicaciones realizaban la expansión transitiva de grupos para averiguar la pertenencia a un grupo, lo que utilizaba demasiado ancho de banda de la red; las aplicaciones necesitaban hacer múltiples viajes de ida y vuelta para averiguar si un objeto caía "en la cadena" si se atravesaba un enlace hasta el final.

La otra razón por la que su consulta podría no devolver resultados es si el usuario que está ejecutando la consulta no tiene acceso de lectura a algunos/todos los usuarios por alguna razón.

0 votos

¡Qué respuesta tan sorprendente! ¡Esto me ayudó enormemente! Siguiendo tu consejo, seguí adelante y añadí manualmente un miembro a este grupo para ver si el centenar de miembros existentes son de hecho heredados. Resulta que cuando añado un miembro manualmente sí que empiezan a salir en la consulta. Así que deben ser heredados como dijiste. Esto me lleva al siguiente problema, la función OID sugerida sigue devolviendo sólo los pocos miembros y excluye los miembros heredados. ¿Alguna sugerencia al respecto? Voy a leer sobre OID.

0 votos

Tras investigar más a fondo el OID, parece que 1.2.840.113556.1.4.1941 debería devolver todos los usuarios, independientemente de su pertenencia anidada. Sin embargo, a mí me da el mismo resultado que mi mensaje inicial. Sé que no es un problema de permisos, ya que estoy consultando como administrador de dominio. ¿Alguna idea?

0 votos

¿Su bosque AD tiene más de un dominio? No estoy seguro de cómo funciona exactamente la consulta anidada con los miembros del grupo que pueden vivir en otro dominio. La otra cosa que yo probaría, si aún no lo has hecho, es asegurarte de que tu sesión de powershell se está ejecutando de forma elevada.

0voto

Rob-d Puntos 359

Get-ADUser -properties memberof -filter * | where -Property memberof -Contains ("CN=MyGroup,OU=Users,DC=MyDomain,DC=com")

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: