什么是AD查询语法来枚举特定组的所有用户?

以下是迄今为止不起作用的东西;

(&(objectCategory =人)(objectClass的=组)(CN = group_in_question))

(&(objectClass的=组)(objectCategory =组)(成员= CN = group_in_question))

(&(=的samAccountName%USERNAME%)(=的memberOf CN = group_in_question))

(&(objectCategory =人)(objectClass的=用户)(=的memberOf CN = group_in_question,OU =组,DC = MYDOMAIN,DC = COM))

第三种语法在LDP.EXE中对我的一个领域工作正常。 我通常不会把(objectCategory = person)放在那里,但是它也可以正常工作。

当你尝试使用它时,你会收到什么样的错误?

这种types的查询有几个要考虑的事情:

  1. 这个查询可能返回多less个对象?
  2. 你想扩大在小组成员的小组吗?
  3. 你是否需要处理任何“大型”组织(1500人以上)?

如果您的查询将不得不search大型的用户数据库,则应始终包含“(ObjectCategory = person)”。 你有几个理由要这样做。 ObjectCategory是objectClass不存在的索引属性,这将显着提高在大型AD数据库上的查询速度。 此外,同时使用objectCategory和objectClass属性将防止查询中返回“联系”对象。

如果结果集将返回超过1000个结果,则需要注意性能问题。 在ADUC GUI中有2000个项目限制,您可以通过“选项”对话框进行更改,增加可以显着减慢您的查询。 如果要使用VBScript并枚举GetObject结果,对于大型组来说,这也将非常缓慢。 对于Quest Powershell cmdlet,您需要包含“-sizelimit”参数来覆盖1000项限制:

get-qadgroupmember somegroup -sizelimit 0 

如果您使用代码(VBScript,JScript,.Net)创build连接对象并向其添加LDAP查询,则需要在连接对象上设置“.pageSize”属性以获取分页结果,因为默认为不返回分页结果,而是将其限制为1000个项目。 我通常将.pageSize设置为1000,因为这是最大值。

扩大嵌套组是棘手的一点。 获取嵌套组信息的最简单方法是使用Quest Powershell cmdlet:

 get-qadgroupmember somegroup -indirect -sizelimit 0 

从VB脚本/ JScript脚本你可以使用“GetObject”并枚举成员集合,testing每个成员的“用户或组”,然后recursion到嵌套组。 这很慢,你不应该这样做,除了作为VBScript编程的练习。

最终,您可能希望通过直接的LDAP查询来学习。 这是通过LDAP_MATCHING_RULE_IN_CHAIN运算符完成的。 这个操作符可能很难使用,如果你的组有很深的嵌套结构,它可以在DC上非常昂贵。 这种方法的好处是,对于非常大的组(默认超过1500个成员),您将能够对作为组成员的用户(甚至是间接的)进行查询,而不是检索组并尝试阅读成员属性(必须在一个特殊的方法中处理“大”组) ,也就是说,你得到一个User对象的报告,比你试图读取一个大的数组的对象更快。

 (&(objectCategory=person)(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=(cn=Group1,OU=groupsOU,DC=x))) 

如果在“大型”组遇到问题时,还可以增加AD在限制访问.member属性时使用的限制。

我认为问题是findA组的所有用户,而不是查找某个用户是否属于A组?

如果你想find一个组的所有成员使用

 dsquery group -name "MyGroup" | dsget group -member 

如果你想查找嵌套成员也可以使用

 dsquery group -name "MyGroup" | dsget group -member -expand 

如果有超过1000或1500个成员,那么dsquery可能不提供结果在这种情况下使用joeware.net的adfind.exe

 ADFIND -f "&(objectcategory=group)(cn=MyGroup)" member 

工作了几天,试图产生一个脚本,该脚本将从包含用户DN列表的文件中提取,并为其parsing属性。 JFV的回应来到您的网站,并发生心脏病。 这是我从JFV的回应中产生的脚本。 基本上,为什么从文件中读取时,你可以从组中直接拉(没有错误陷阱呢)…这个脚本允许我拉文本文件到Excel或其他电子表格应用程序,并在pipe道上删除。 我可以在这一点上做所有我想要的分类。 只是觉得别人可以从我的损失中获益。 🙁

 Dim objGroup Dim objUser on error resume next 'Create a file and write headers Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.CreateTextFile ("lastpassword.txt") f.WriteLine "firstName|initials|lastName|userPrincipalName|physicalDeliveryOfficeName|sAMAccountName|mail|cn|description|mobile|telephoneNumber|physicalDeliveryOfficeName|department|facsimileTelephoneNumber|pager" 'Search for a group name in AD and parse information to a file in pipe delimination Set objGroup = Getobject ("LDAP: //CN=groupname,OU=GROUPS,DC=FQDN,DC=FQDN,DC=FQDN") For Each objUser In objGroup.Members f.WriteLine objUser.firstName & "|" & _ objUser.initials & ".|" & _ objUser.lastName & "|" & _ objUser.userPrincipalName & "|" & _ objUser.physicalDeliveryOfficeName & "|" & _ objUser.sAMAccountName & "|" & _ objUser.mail & "|" & _ objUser.cn & "|" & _ objUser.description & "|" & _ objuser.mobile & "|" & _ objuser.telephoneNumber & "|" & _ objuser.physicalDeliveryOfficeName & "|" & _ objuser.department & "|" & _ objuser.facsimileTelephoneNumber & "|" & _ objuser.userAccountControl & "|" & _ objUser.PasswordLastChanged Next f.close 

这是我通过VBScript使用的东西:

枚举用户

  Dim objGroup Dim x Set objGroup = Getobject ("LDAP: //CN=LocalGrp,OU=Staff, DC=net, DC=dom") For Each x In objGroup.Members WScript.Echo x.Class WScript.Echo x.Name WScript.Echo x.ADsPath WScript.Echo x.distinguishedName + vbCrLf Next 

使用Quest AD cmdlet可以在PowerShell中轻松完成此任务 –

 get-QADGroupMember [groupname] 

然后过滤和sorting!

 get-QADGroupMember [groupname] | where {$_.[Property] -like [criteria]} | sort-object 

KAPes,你正在回答我感兴趣的问题,列出组A的所有成员。但是你的命令示例不起作用,因为“成员”应该是复数, -members 。 枚举login名,显示名称和电子邮件地址(全部在一行中)的格式良好的表中的所有Active Directory组成员:

 dsget group "CN=Group A,OU=DepartmentB,OU=Users and Groups,DC=my,DC=domain,DC=com" -members | dsget user -samid -display -email 

更多信息: http : //technet.microsoft.com/en-us/library/cc755876%28WS.10%29.aspx#BKMK_group