C# 按用户名搜索整个Active Directory林

C# 按用户名搜索整个Active Directory林,c#,active-directory,C#,Active Directory,我的组织拥有由多个域名组成的active directory forestry。我需要编写一个应用程序来按用户id查找用户 string username = "test_user_id"; DirectoryEntry entry = new DirectoryEntry("LDAP://one_of_the_domain"); DirectorySearcher dSearch = new DirectorySearcher(entry);

我的组织拥有由多个域名组成的active directory forestry。我需要编写一个应用程序来按用户id查找用户

        string username = "test_user_id";

        DirectoryEntry entry = new DirectoryEntry("LDAP://one_of_the_domain");
        DirectorySearcher dSearch = new DirectorySearcher(entry);
        dSearch.Filter = "(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + username + "))";
        SearchResult result = dSearch.FindOne();

        if (result != null)
        {
            var email = result.Properties["mail"];
            Console.WriteLine(email[0]);
        }

上面的示例代码允许我在
一个\u域中搜索用户。但是有没有一种方法可以在整个active directory林中找到用户?

使用
类获取当前全局目录,然后可以从中获取对搜索整个林的
DirectorySearcher
的引用

    var currentForest = Forest.GetCurrentForest();
    var gc = currentForest.FindGlobalCatalog();

    using (var userSearcher = gc.GetDirectorySearcher())
    {
      userSearcher.Filter = 
"(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + username + "))";
            SearchResult result = userSearcher.FindOne();

    }

使用
类获取当前全局目录,然后可以从中获取对将搜索整个林的
DirectorySearcher
的引用

    var currentForest = Forest.GetCurrentForest();
    var gc = currentForest.FindGlobalCatalog();

    using (var userSearcher = gc.GetDirectorySearcher())
    {
      userSearcher.Filter = 
"(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + username + "))";
            SearchResult result = userSearcher.FindOne();

    }

它仍然只在当前域中搜索。我是否需要在环境中进行任何更改。如何确保两个域位于同一个林中。我已经启用了这些域之间的信任。请使用.FindAllGlobalCatalogs。FindGlobalCatalog只返回一个。还有。FindAllDiscoverableGlobalCatalogs。我不知道有什么区别。它仍然只在当前域中搜索。我是否需要对环境进行任何更改。如何确保两个域位于同一个林中。我已经启用了这些域之间的信任。请使用.FindAllGlobalCatalogs。FindGlobalCatalog只返回一个。还有。FindAllDiscoverableGlobalCatalogs。我不知道有什么区别。