C# 目录服务,搜索所有可用的提供程序

C# 目录服务,搜索所有可用的提供程序,c#,active-directory,ldap,directoryservices,domaincontroller,C#,Active Directory,Ldap,Directoryservices,Domaincontroller,我使用以下方法在本地计算机上或在当前林中搜索用户组 public string FindUserGroup(string group) { //Search local computer using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry())) { searcher.Filter = "(&(objectC

我使用以下方法在本地计算机上或在当前林中搜索用户组

public string FindUserGroup(string group)
    {
        //Search local computer
        using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry()))
        {
            searcher.Filter = "(&(objectClass=group)(|(cn=" + group + ")(dn=" + group + ")))";
            SearchResult result = searcher.FindOne();
            if (result != null)
                return TranslateDirectoryEntryPath(result.GetDirectoryEntry().Path);
        }

        //Search current forest
        Forest forest = Forest.GetCurrentForest();
        foreach (Domain domain1 in forest.Domains)
        {
            using (DirectorySearcher searcher = new DirectorySearcher(domain1.GetDirectoryEntry()))
            {
                searcher.Filter = "(&(objectClass=group)(|(cn=" + group + ")(dn=" + group + ")))";
                SearchResult result = searcher.FindOne();
                if (result != null)
                    return TranslateDirectoryEntryPath(result.GetDirectoryEntry().Path);
            }
        }

        return string.Empty;
    }
我的问题是,作为一个例子,我们说的是domain.local和mydomain.local,而我当前的登录名绑定到domain.local,那么使用下面的命令将无法在mydomain.local中找到任何内容,即使我通过Windows用户界面能够找到

当我不一定了解所有可视提供商时,如何从我的计算机角度搜索它们?我真的必须自己做注册工作吗

编辑:

这两个域的一个不同之处在于,当我在“对象浏览器”对话框中选择位置时,它们所处的级别为:

计算机 全方位 域本地 mydomain.local
因此,mydomain.local激子位于所谓的整个目录之外,但我的计算机可以找到它,如果这有什么区别的话?

我不认为有问题,因为这里的代码已经绑定到其他域

foreach (Domain domain1 in forest.Domains)
{
    using (DirectorySearcher searcher = new DirectorySearcher(domain1.GetDirectoryEntry()))
    {

您是想说以后您自己绑定了一个DirectoryEntry,却找不到其他域中的对象吗?

您只需搜索本地计算机,然后在Gobal目录中搜索即可。如果您的目录林没有全局目录,则是的,您必须从每个域逐个进行搜索。@Harvey Kwok:这只能通过注册表进行访问?。。。因为“对象浏览器”对话框列出了域,所以计算机对该域有一定的了解。我似乎记得我在注册表中找到了一些关于它的信息,但希望我不必在那里挖掘它。你是说一个完整的域名列表?它通常是从Active Directory获取的。Active Directory存储哪个域信任哪个域。检查CN=System容器并找出那里所有的trustedDomain对象。不,我是说代码原样不起作用。--我们的计算机绑定到两个域。。。但是使用代码,我在其中一个域中找不到任何对象。--域我无法通过使用代码找到对象,但我可以在使用对象浏览器对话框时轻松找到对象,例如,向共享文件夹添加权限等等因此,我的计算机显然可以看到我所说的mydomain.local,但我的代码无法…我添加了一些以前没有注意到的新信息,不确定它们是否有任何区别,代码仍然不起作用。这部分代码对我来说确实有效。我可以通过这种方式访问其他域。可能是搜索过滤器之类的其他原因吗?或者可以尝试cn=*并列出所有对象。嗯,forest.Domains永远不会返回该域,因此更改搜索字符串似乎是在抓救命稻草。