2016-09-28 1 views
0

1) - Je suis à la recherche de la requête LDAP (Active Directory) pour obtenir les rôles (groupes) d'un utilisateur spécifié sans spécifier le nom désaffecté de l'utilisateur.Active Directory: obtenir les rôles d'un utilisateur

Je suis en mesure d'obtenir ceci en utilisant cette demande: (& (objectclass = groupe) (membre: 1.2.840.113556.1.4.1941: = cn = admin, ou = utilisateurs, ou = OUTest, dc = exemple, dc = com))

mais je ne veux pas spécifier la racine entière à l'utilisateur (ou = utilisateurs, ou = OUTest, dc = exemple, dc = com). 2) - Comment obtenir les groupes d'un utilisateur spécifié en utilisant "sAMAccountName" au lieu du nom commun CN? (*): 1.2.840.113556.1.4.1941 est utilisé pour obtenir tous les groupes imbriqués dans Active Directory.

Merci d'avance.

Répondre

1

La documentation relative à 1.2.840.113556.1.4.1941 matching rule dans ActiveDirectory est sans ambiguïté. Non souligné:

1.2.840.113556.1.4.1941
LDAP_MATCHING_RULE_IN_CHAIN

Cette règle est limitée aux filtres applicables à la DN. Il s'agit d'un opérateur de correspondance "étendu" spécial qui parcourt la chaîne d'ascendance dans les objets jusqu'à la racine jusqu'à ce qu'il trouve une correspondance.

Il n'est pas possible de l'utiliser avec autre chose qu'un DN complet car il correspond à des attributs qui contiennent des DN complets.

mais je ne veux pas spécifier la racine entière à l'utilisateur

chance Bien. ;)

Construisez votre programme de manière à ce que l'utilisateur puisse travailler avec quelque chose de plus pratique, par exemple samAccountName et traduise cela en une chaîne de recherche avec le DN complet.


Par exemple, dans Powershell:

function Get-ADUserGroups($username) { 
    if ($username) { 
     Get-ADUser $username | ForEach-Object { 
      $userDN = $_.DistinguishedName 
      $ldapFilter = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=$userDN))" 

      Get-ADObject -LDAPFilter $ldapFilter 
     } 
    } 
} 

Utilisation

Get-ADUserGroups userXYZ 

Ou, pour le plaisir de le faire, la même chose dans le lot Windows standard (GetADUserGroups.bat) :

@echo off 
setlocal enabledelayedexpansion 

set USER=%~1 

if "%USER%" neq "" (
    for /f "delims=" %%d in ('dsquery user -samid "%USER%"') do (
     set "LDAP_FILTER=(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=%%~d))" 
     dsquery * -filter "!LDAP_FILTER!" -limit 1000 
    ) 
) 

Utilisation

GetADUserGroups userXYZ