Active Directory列表OU

Ste*_*rby 6 c# directoryservices ldap active-directory

我目前有这个代码,

        string defaultNamingContext;

        DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
        defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
        rootDSE = new DirectoryEntry("LDAP://" + defaultNamingContext);
        //DirectoryEntry domain = new DirectoryEntry((string)"LDAP://" + defaultNamingContext);

        DirectorySearcher ouSearch = new DirectorySearcher(rootDSE,"(objectCategory=Organizational-Unit)", 
                                 null, SearchScope.Subtree);

        MessageBox.Show(rootDSE.Path.ToString());
        try
        {
            SearchResultCollection collectedResult = ouSearch.FindAll();
            foreach (SearchResult temp in collectedResult)
            {
                comboBox1.Items.Add(temp.Properties["name"][0]);
                DirectoryEntry ou = temp.GetDirectoryEntry();
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我使用调试器时,我可以看到rootDSE.Path实际指向正确的位置,在这种情况下,DC=g-t-p,DC=Local但目录搜索器找不到任何结果.有人可以帮忙吗?

mar*_*c_s 8

斯蒂芬 - 我的坏 - 由于某种原因,使用objectCategory的搜索不起作用.

即使objectCategory显示CN=Organizational-Unit为搜索,您仍然需要使用与objectClass相同的值:

所以尝试使用过滤器(objectCategory=organizationalUnit)- 这绝对适合我!

更新:为了在搜索结果中获取某些属性(为了在组合框中显示它们),您需要在创建DirectorySearcher时包含这些属性:

DirectorySearcher ouSearch = new DirectorySearcher(rootDSE);
ouSearch.Filter = "(objectCategory=Organizational-Unit)";
ouSearch.SearchScope = SearchScope.Subtree;

ouSearch.PropertiesToLoad.Add("name");
// add more properties if you want to ...
Run Code Online (Sandbox Code Playgroud)

有了这个,你绝对应该抓住temp.Properties["name"][0]它并将其粘贴到组合框的项目列表中.

我真的没看到你需要什么线

DirectoryEntry ou = temp.GetDirectoryEntry();
Run Code Online (Sandbox Code Playgroud)

抓住名称属性.....