我在Excel中有一个宏,我定期用它来提取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命令字符串中,因此我知道它不是名称上的拼写错误。这个群体是一个拥有大量成员的大型团体,但我也尝试过其他大型团体。我无法看到可能导致问题的原因。有什么想法吗?
答案 0 :(得分:2)
&#34;成员&#34;属性不包括主要组成员的成员 例如&#34;域用户&#34;团体可能有很多成员,但其成员&#34;属性可以为空。
要检查主要组成员身份,请使用primaryGroupToken(group)和primaryGroupId(user)属性。
e.g。 &#34;域用户&#34; groupGroupToken中的值为513。 这意味着同一域中的任何用户对象,其primaryGroupId = 513是此&#34; Domain Users&#34;的成员。基。
其他评论:
GetObject("LDAP://[MyDomain.co.uk]/" & groupDistinguisedName)
来获取小组?
distinguishedName属性未编入索引。大型环境中的查询可能很慢。