我所在的组织的Active Directory具有非常深的嵌套组结构。我想查询目录,以递归地从Linux机器中查找组的用户成员。在Windows机器上,
dsget group "dn_of_group" -members -expand
做我想做的事,而且做得很快。当我试图通过带有的LDAP获得相同的结果时
(memberOf:1.2.840.113556.1.4.1941:=dn_of_group)
查询运行几乎需要一分钟时间。dsget
是在后台使用LDAP,还是使用其他方式查询目录?如果是的话,我有没有办法也使用它?
编辑:澄清了我需要作为用户的成员。
带有System.DirectoryServices.AccountManagement命名空间的框架3.5提供了一种递归搜索所有组并返回用户所属组的方法。返回的集合还可以包括系统出于授权目的将用户视为其成员的附加组。
UserPrincipal.GetAuthorizationGroups()
此方法返回的组可能包括来自与主体不同的作用域和存储的组。例如,如果主体是一个DN为"CN=SpecialGroups,DC=Fabrikam,DC=com"的AD DS对象,则返回的集合可以包含属于"CN=NormalGroups,DC=Fabri卡姆,DC=com
在另一个方向上:
GroupPrincipal.GetMembers(bool recursive)
参见备注