5

我希望能够从 Active Directory 中提取当前 OU 的列表 我一直在网上查看一些示例代码,但 O 似乎无法使其正常工作。

        string defaultNamingContext;

        DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
        defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
        DirectorySearcher ouSearch = new DirectorySearcher(rootDSE, "(objectClass=organizationalUnit)", 
            null, SearchScope.Subtree);

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

我得到的错误是那里提供者不支持搜索并且无法搜索 LDAP://RootDSE 有什么想法吗?对于每个返回的搜索结果,我想将它们添加到组合框中。(不应该太难)

4

1 回答 1

10

您无法在LDAP://RootDSE级别上进行搜索 - 这只是包含一些内容的“信息”地址。它并不真正代表您目录中的任何位置。您需要先绑定到默认命名上下文:

string defaultNamingContext;

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

DirectoryEntry default = new DirectoryEntry("LDAP://" + defaultNamingContext);

DirectorySearcher ouSearch = new DirectorySearcher(default, 
                                     "(objectClass=organizationalUnit)", 
                                     null, SearchScope.Subtree);

完成此操作后,您应该可以找到域中的所有 OU。

为了加快速度,我建议不要使用搜索objectClass- 该属性在 AD 中编制索引。改为使用objectCategory,它被索引:

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

更新:
我发现这个过滤器是错误的 - 即使在ADSI 浏览器objectCategory中显示,您需要在搜索中指定它才能成功:CN=Organizational-Unit,.....objectCategory=organizationalUnit

DirectorySearcher ouSearch = new DirectorySearcher(default, 
                                     "(objectCategory=organizationalUnit)", 
                                     null, SearchScope.Subtree);
于 2010-05-25T10:26:54.510 回答