2014-11-27 1 views
0

Active Directory 내에서 그룹 구성원의 세부 정보를 추출하는 데 정기적으로 사용하는 Excel 내 매크로가 있습니다. 그것은 시도한 모든 그룹에 대해 잘 작동하지만 데이터를 얻을 수없는 그룹을 발견했습니다. 내가 존재하지 않는 그룹 이름으로 스크립트를 실행하려고했습니다LDAP 쿼리가 Active Directory에서 특정 그룹을 찾을 수 없습니다.

Set rootDSE = GetObject("LDAP://[MyDomain.co.uk]/RootDSE") 
DomainContainer = rootDSE.Get("defaultNamingContext") 

Set conn = CreateObject("ADODB.Connection") 
conn.Provider = "ADSDSOObject" 
conn.Open "ADs Provider" 


Set command = CreateObject("ADODB.Command") 
Set command.ActiveConnection = conn 
command.Properties("Page size") = 200 

groupDistinguisedName = "CN=[Group Name],OU=xxx,OU=xxx,DC=MyDomain,DC=co,DC=uk" 
command.CommandText = "<LDAP://" & DomainContainer & ">;(distinguishedName=" & groupDistinguisedName & ");member;subtree" 

Set rs = command.Execute 

On Error Resume Next 
dataVal = rs.Fields("member").Value 

하고 스크립트가 다른 방식으로 동작 - dataVal가 으로 설정됩니다

스크립트의 해당 비트는 다음과 같습니다 그룹이 존재하지 않지만 Null 그룹의 경우 그룹에 문제가있어 그룹을 찾았지만 그룹 구성원을 확보 할 수없는 것으로 보입니다.

Active Directory에서 직접 고유 이름을 잘라내어 LDAP 명령 문자열에 붙여 넣어 보았습니다. 이름에 오타가없는 것으로 알고 있습니다. 이 그룹은 회원이 많은 대규모 그룹이지만 다른 대규모 그룹도 시도했습니다. 문제를 일으킬 수있는 것이 무엇인지 알 수 없습니다. 어떤 아이디어?

답변

1

"member"속성에는 기본 그룹 구성원 자격이 없습니다.
예 : "도메인 사용자"그룹에는 많은 회원이 있지만 "회원"속성은 비어있을 수 있습니다.

기본 그룹 회원 자격을 확인하려면 primaryGroupToken (그룹) 및 primaryGroupId (사용자) 속성을 사용하십시오.

  • (primaryGroupToken가 구성 속성이 있음을 유의)
primaryGroupID를에서 같은 값을 가진 모든 사용자에 대한 같은 도메인에서
  • 검색 그룹
    에서 primaryGroupToken 속성의 값을 가져옵니다

    예 "Domain Users"그룹의 값은 primaryGroupToken에서 513입니다. 동일한 도메인 (primaryGroupId = 513)의 사용자 개체가이 "도메인 사용자"그룹의 구성원임을 의미합니다.

    기타 의견 :

    • 당신은 이미 DN하고 서버를 알고있다. 그룹에 직접 GetObject("LDAP://[MyDomain.co.uk]/" & groupDistinguisedName) 번으로 전화하지 않으시겠습니까? distinguishedName 특성은 인덱싱되지 않습니다. 큰 env에서 쿼리가 느려질 수 있습니다.
    • "구성원"속성에> 1500 (구성 가능) 멤버가있는 경우 범위 검색을 사용해야합니다. 그렇지 않으면 1500을 얻게됩니다.
  • +0

    VBScript가 좋지 않으므로 내가 사용하는 매크로가 여러 가지 소스에서 수십 년 동안 함께 자갈처럼 얽혀 있습니다. primaryGroup뿐만 아니라 모든 그룹의 구성원을 열거 할 수 있어야하므로 내 경우에는 primaryGroupToken 특성 토큰이 유용하지 않습니다. 당신이 나에게 좀 더 자세하게 설명해 줄 수 있다면 GetObject를 사용하는 방법을보고 싶다. (성능은 아직까지는 문제가되지 않았지만). 범위 검색은 정확히 제가 겪었던 문제입니다. 멤버가 1500 명이 넘기 때문에 * members * 속성이 null입니다. 고맙습니다! – paulH

    +0

    VB에서 Range Retrieval을 수행하는 방법은이 [link] (http://msdn.microsoft.com/en-us/library/aa746518(v=vs.85)asp)를 참조하십시오. – baldpate

    +0

    또한 이론적으로 모든 그룹 구성원을 표시하려면 기본 그룹 및 "일반"그룹 구성원을 모두 확인해야합니다. 즉, 기본 멤버를 "멤버"속성에서 가져올 수 없으며 그 반대의 경우도 마찬가지입니다. 그러나 대부분의 경우 도메인 사용자와 같은 소수의 특수 그룹 만이 기본 그룹 구성원을 갖습니다. 사용 사례에 따라 기본 그룹 멤버쉽을 모두 처리하거나 생략 할 수 있습니다. – baldpate

    관련 문제