2016-09-28 192 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 
相關問題