目前,我使用 groupprincipal-class (.NET 3.5) 的 GetMembers 方法(使用true)来枚举组的所有成员(包括嵌套组)。
如果在子组中主域组(域用户)是成员,我无法正确枚举所有成员。提到的方法没有枚举 Domain-Users 组。
有什么想法可以避免这个问题吗?我需要一个快速的算法。因此,单独枚举每个组/子组并不是一个好的解决方案。
目前,我使用 groupprincipal-class (.NET 3.5) 的 GetMembers 方法(使用true)来枚举组的所有成员(包括嵌套组)。
如果在子组中主域组(域用户)是成员,我无法正确枚举所有成员。提到的方法没有枚举 Domain-Users 组。
有什么想法可以避免这个问题吗?我需要一个快速的算法。因此,单独枚举每个组/子组并不是一个好的解决方案。
我正在使用 System.DirectoryServices 发送 LDAP 查询。
它很快;我用它来查询 ~100k 用户,它需要 ~20-30 秒。(虽然在外部域上,如果我在本地域上会更快)
这是我的做法:
DirectoryEntry DE = new DirectoryEntry("LDAP://OU=ou_to_search_recursively", user, password);
using (DirectorySearcher DSE = new DirectorySearcher(DE))
{
DSE.PageSize = 1000;
//get only users
DSE.Filter = "(&(objectClass=user)(objectCategory=person))";
//search recursively
DSE.SearchScope = SearchScope.Subtree;
//load the properties that you want
DSE.PropertiesToLoad.Clear();
DSE.PropertiesToLoad.Add("distinguishedName");
DSE.PropertiesToLoad.Add("cn");
DSE.PropertiesToLoad.Add("other_attribute_you_might_want");
foreach (SearchResult u in DSE.FindAll())
{
//check if property exists
if (u.Properties.Contains("distinguishedName")) {
// access property:
string dn = u.Properties["distinguishedName"][0].ToString();
}
//...
}
}
我希望它有所帮助。