Directorysearcher 如何使用目录搜索器从主active directory获取子active directory列表?

Directorysearcher 如何使用目录搜索器从主active directory获取子active directory列表?,directorysearcher,Directorysearcher,假设我有三个活动目录D1,D2,D3 D2 is group member of D1. D3 is group member of D2. 所以,如果我想得到D1的组成员列表,结果应该是D2,而不是D2和D3 如何做到这一点?将哈希表变量定义为全局变量。 哈希表searchedGroups=null strGroupDN是主目录列表名 private ArrayList getsubDL(string strGroupDN) { ArrayList

假设我有三个活动目录
D1
D2
D3

D2 is group member of D1. 
D3 is group member of D2. 
所以,如果我想得到
D1
的组成员列表,结果应该是
D2
,而不是
D2
D3


如何做到这一点?

将哈希表变量定义为全局变量。 哈希表searchedGroups=null

strGroupDN是主目录列表名

     private ArrayList getsubDL(string strGroupDN)
      {
        ArrayList allSubDL = new ArrayList();
        searchedGroups.Add(strGroupDN, strGroupDN);
        // get nested groups
        ArrayList Nestedgroups = new ArrayList();

        // find all nested groups in this group
        DirectorySearcher ds = new DirectorySearcher();
        ds.Filter = String.Format
                    ("(&(memberOf={0})(objectClass=group))", strGroupDN);

        foreach (SearchResult sr in ds.FindAll())
        {
            string grnm = sr.Properties["distinguishedName"][0].ToString();
            string grnsamn = sr.Properties["sAMAccountName"][0].ToString();
            Nestedgroups.Add(sr.Properties["distinguishedName"][0].ToString());
        }
        allSubDL.AddRange(Nestedgroups);


        return allSubDL;
    }




     public ArrayList GetsubDLList(string strGroupName)
      {
        ArrayList allSubDL = new ArrayList();
         searchedGroups = new Hashtable();

        // find group
        DirectorySearcher search = new DirectorySearcher();
        search.Filter = String.Format
                        ("(&(objectCategory=group)(cn={0}))", strGroupName);
        search.PropertiesToLoad.Add("distinguishedName");
        SearchResult sru = null;
        DirectoryEntry group;

        try
        {
            sru = search.FindOne();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        group = sru.GetDirectoryEntry();

        allSubDL = getsubDL(group.Properties["distinguishedName"].Value.ToString());

        return allSubDL;
    }
allSubDL将为您提供子目录列表的详细信息