获取AD OU列表

时间:2010-05-25 09:45:58

标签: c# active-directory directoryservices

我希望能够从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任何想法? 对于每个返回的搜索结果,我想将它们添加到组合框中。 (不应该太难)

2 个答案:

答案 0 :(得分: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);

<强>更新
我发现此过滤器错误 - 即使objectCategory中的CN=Organizational-Unit,.....显示为objectCategory=organizationalUnit,您需要在搜索成功时指定DirectorySearcher ouSearch = new DirectorySearcher(default, "(objectCategory=organizationalUnit)", null, SearchScope.Subtree);

{{1}}

答案 1 :(得分:0)

很好的修复,这应该是microsoft为此链接提供的教程的一部分

http://msdn.microsoft.com/en-us/library/ms180890(VS.80).aspx