Active directory LDAP查询在Active Directory中找不到特定组

Active directory LDAP查询在Active Directory中找不到特定组,active-directory,ldap,Active Directory,Ldap,我在Excel中有一个宏,我定期使用它来提取Active Directory中组成员的详细信息。我尝试过的每一组都很好,但我遇到了一组我似乎无法获得数据的组 脚本的相关部分如下所示: Set rootDSE = GetObject("LDAP://[MyDomain.co.uk]/RootDSE") DomainContainer = rootDSE.Get("defaultNamingContext") Set conn = CreateObject("ADODB.Connection")

我在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
Set rootDSE=GetObject(“LDAP://[MyDomain.co.uk]/rootDSE”)
DomainContainer=rootDSE.Get(“defaultNamingContext”)
Set conn=CreateObject(“ADODB.Connection”)
连接提供程序=“ADSDSOObject”
康涅狄格州开放式“广告提供商”
Set command=CreateObject(“ADODB.command”)
Set command.ActiveConnection=conn
command.Properties(“页面大小”)=200
groupDistinguisedName=“CN=[组名],OU=xxx,OU=xxx,DC=MyDomain,DC=co,DC=uk”
command.CommandText=“;(DifferentizedName=“&groupDistinguisedName&”);成员;子树
设置rs=command.Execute
出错时继续下一步
dataVal=rs.Fields(“成员”).Value
我尝试使用不存在的组名运行脚本,并且脚本以不同的方式运行-如果组不存在,则dataVal设置为,但对于我遇到问题的组,dataVal设置为,因此,它似乎已经找到了该组,但不知何故无法找到该组的成员

我已经尝试将可分辨名称直接从Active Directory剪切并粘贴到LDAP命令字符串中,这样我就知道它不是名称的输入错误。这个团体是一个有很多成员的大团体,但我也尝试过其他大团体。我只是看不出是什么导致了这个问题。有什么想法吗?

“成员”属性不包括主要组成员的成员。
e、 g.“域用户”组可能有许多成员,但其“成员”属性可以为空

要检查主组成员身份,请使用primaryGroupToken(组)和primaryGroupId(用户)属性

  • 从组中获取primaryGroupToken属性的值
    (注意primaryGroupToken是一个构造属性)
  • 相同域中搜索primaryGroupId中具有相同值的所有用户
e、 g.“域用户”组在primaryGroupToken中的值为513。 这意味着同一域中primaryGroupId=513的任何用户对象都是此“域用户”组的成员

其他意见:

  • 您已经知道DN和服务器。为什么不直接调用
    GetObject(“LDAP://[MyDomain.co.uk]/”&groupDistinguisedName)
    来获取组? DifferentizedName属性未编制索引。在大型环境中,查询速度可能较慢
  • 如果“成员”属性中有>1500个(可配置)成员,则需要使用范围检索。否则你只能得到1500英镑
我的VBScript不是很好,所以我使用的宏是多年来从各种来源拼凑而成的。primaryGroupToken属性token在我的示例中没有用处,因为我需要能够枚举任何组的成员,而不仅仅是主组。如果您能为我提供更多的细节,我想看看如何按照建议使用GetObject(尽管性能到目前为止还不是一个真正的问题)。范围检索正是我遇到的问题-members属性为null,因为有1500多个成员。谢谢你!请检查这个,了解如何在VB中进行范围检索。另外,理论上,要显示所有组成员,您需要检查主要组和“正常”组成员。这意味着您无法从“member”属性获取主要组成员,反之亦然。但在大多数情况下,只有少数特殊组(如域用户)具有主要组成员。根据您的用例,您可以同时处理这两个问题或省略主要组成员资格。