2016-09-28 207 views
0

1) - 我正在查找LDAP的查询(Active Directory)以获取指定用户的角色(组),而不指定用户的dinstinguished名称。 ((objectclass = group)(member:1.2.840.113556.1.4.1941:= cn = admin,ou = users,ou = OUTest,dc = example, dc = com))Active Directory:获取用户的角色

但我不想为用户指定整个根(ou = users,ou = OUTest,dc = example,dc = com)。

2) - 我如何使用“sAMAccountName”而不是通用名称CN获取指定用户的组?

(*)成员:1.2.840.113556.1.4.1941用于获取Active Directory中的所有嵌套组。

预先感谢您。

回答

1

有关ActiveDirectory中1.2.840.113556.1.4.1941 matching rule的文档是明确的。重点煤矿:

1.2.840.113556.1.4.1941
LDAP_MATCHING_RULE_IN_CHAIN

这一规则仅限于适用于DN过滤器。这是一个特殊的“扩展”匹配运算符,它将始祖的链条沿着对象遍及根,直到找到匹配。

由于它与包含完整DN的属性相匹配,因此无法将它用于除完整DN之外的任何内容。

,但我不希望指定整根用户

虽然运气。 ;)

以让用户使用更方便的方式构建程序,例如samAccountName并将其转换为具有完整DN的搜索字符串。


例如在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 
     } 
    } 
} 

使用

Get-ADUserGroups userXYZ 

或者,它的缘故,在常规的Windows一批同样的事情(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 
    ) 
) 

用法

GetADUserGroups userXYZ 
相关问题