枚举Active Directory组成员(嵌套),包括域用户(主组)

时间:2013-03-07 13:00:28

标签: c# .net active-directory

目前,我使用了groupprincipal-class(.NET 3.5)的GetMembers方法(带有 true )来枚举组的所有成员(包括嵌套组)。

如果在子组中主域组(Domain-Users)是成员,我无法正确枚举成员。上述方法不会枚举Domain-Users组。

有什么想法可以避免这个问题?我需要一个快速的算法。因此,列举每个组/子组是不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

我正在使用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();
        }
        //...
    }
}

我希望它有所帮助。