C# 获取与域关联的其他ldap查询字符串

C# 获取与域关联的其他ldap查询字符串,c#,active-directory,C#,Active Directory,我在Softerra LDAP管理中有如下内容: 服务器:blah.gov OU=域控制器等… ldap://subdomain.blah.gov 我不知道如何在C#中获取其他ldap子域查询字符串 我不知道如何解释它,所以问一些问题,我会尽力澄清 更新:这就是Softerra LDAP管理员的外观。底部附近的ldap查询不是上述节点的子节点,但不知何故,程序知道它们并在GUI中链接它们。如果我能想出办法,那就可以解决我的问题了 查看我的BeaverTail LDAP浏览器-它是免费的,采用10

我在Softerra LDAP管理中有如下内容:

服务器:blah.gov
OU=域控制器等…
ldap://subdomain.blah.gov

我不知道如何在C#中获取其他ldap子域查询字符串

我不知道如何解释它,所以问一些问题,我会尽力澄清

更新:这就是Softerra LDAP管理员的外观。底部附近的ldap查询不是上述节点的子节点,但不知何故,程序知道它们并在GUI中链接它们。如果我能想出办法,那就可以解决我的问题了


查看我的BeaverTail LDAP浏览器-它是免费的,采用100%C#代码,可在以下位置获得:

最有趣的LDAP地址之一是
LDAP://RootDSE
——它将向您显示有关广告林和其他有趣内容的大量信息。如果单击my Beavertail浏览器中的根树节点,您将看到该有趣系统节点的内容

Beavertail还将向您展示AD层次结构,并向您展示组成该层次结构的LDAP路径


这有帮助吗???

查看我的BeaverTail LDAP浏览器-它是免费的,采用100%C代码,可在此处获得:

最有趣的LDAP地址之一是
LDAP://RootDSE
——它将向您显示有关广告林和其他有趣内容的大量信息。如果单击my Beavertail浏览器中的根树节点,您将看到该有趣系统节点的内容

Beavertail还将向您展示AD层次结构,并向您展示组成该层次结构的LDAP路径


这有帮助吗???

您应该使用全局目录对整个森林进行全局搜索。如果将DirectorySearcher绑定到全局编录,则它应提供包括子域在内的所有对象

如果您的林没有任何全局编录,或者您没有绑定到全局编录的权限(非常罕见),则必须枚举林中的所有域,逐个执行LDAP查询,并自行聚合结果

这是我起草的一个示例函数,供您参考

IEnumerable<SearchResult> Search(string domain, string filter)
{
    DirectoryContext context = new DirectoryContext(DirectoryContextType.Forest, domain);
    Forest forest = Forest.GetForest(context);
    GlobalCatalog gc = null;
    try
    {
        gc = forest.FindGlobalCatalog();
    }
    catch (ActiveDirectoryObjectNotFoundException)
    {
        // No GC found in this forest
    }

    if (gc != null)
    {
        DirectorySearcher searcher = gc.GetDirectorySearcher();
        searcher.Filter = filter;
        foreach (SearchResult result in searcher.FindAll())
        {
            yield return result;
        }
    }
    else
    {
        foreach (Domain d in forest.Domains)
        {
            DirectorySearcher searcher = new DirectorySearcher(d.GetDirectoryEntry(), filter);
            foreach (SearchResult result in searcher.FindAll())
                yield return result;
        }
    }
}
IEnumerable搜索(字符串域、字符串过滤器)
{
DirectoryContext=新的DirectoryContext(DirectoryContextType.Forest,域);
Forest-Forest=Forest.GetForest(上下文);
GlobalCatalog gc=null;
尝试
{
gc=forest.FindGlobalCatalog();
}
捕获(ActiveDirectoryObjectNotFoundException)
{
//在此林中未找到GC
}
如果(gc!=null)
{
DirectorySearcher search=gc.GetDirectorySearcher();
searcher.Filter=过滤器;
foreach(searcher.FindAll()中的SearchResult)
{
收益结果;
}
}
其他的
{
foreach(林中的域d.Domains)
{
DirectorySearcher search=新的DirectorySearcher(d.GetDirectoryEntry(),过滤器);
foreach(searcher.FindAll()中的SearchResult)
收益结果;
}
}
}

您应该使用全局目录对整个林进行全局搜索。如果将DirectorySearcher绑定到全局编录,则它应提供包括子域在内的所有对象

如果您的林没有任何全局编录,或者您没有绑定到全局编录的权限(非常罕见),则必须枚举林中的所有域,逐个执行LDAP查询,并自行聚合结果

这是我起草的一个示例函数,供您参考

IEnumerable<SearchResult> Search(string domain, string filter)
{
    DirectoryContext context = new DirectoryContext(DirectoryContextType.Forest, domain);
    Forest forest = Forest.GetForest(context);
    GlobalCatalog gc = null;
    try
    {
        gc = forest.FindGlobalCatalog();
    }
    catch (ActiveDirectoryObjectNotFoundException)
    {
        // No GC found in this forest
    }

    if (gc != null)
    {
        DirectorySearcher searcher = gc.GetDirectorySearcher();
        searcher.Filter = filter;
        foreach (SearchResult result in searcher.FindAll())
        {
            yield return result;
        }
    }
    else
    {
        foreach (Domain d in forest.Domains)
        {
            DirectorySearcher searcher = new DirectorySearcher(d.GetDirectoryEntry(), filter);
            foreach (SearchResult result in searcher.FindAll())
                yield return result;
        }
    }
}
IEnumerable搜索(字符串域、字符串过滤器)
{
DirectoryContext=新的DirectoryContext(DirectoryContextType.Forest,域);
Forest-Forest=Forest.GetForest(上下文);
GlobalCatalog gc=null;
尝试
{
gc=forest.FindGlobalCatalog();
}
捕获(ActiveDirectoryObjectNotFoundException)
{
//在此林中未找到GC
}
如果(gc!=null)
{
DirectorySearcher search=gc.GetDirectorySearcher();
searcher.Filter=过滤器;
foreach(searcher.FindAll()中的SearchResult)
{
收益结果;
}
}
其他的
{
foreach(林中的域d.Domains)
{
DirectorySearcher search=新的DirectorySearcher(d.GetDirectoryEntry(),过滤器);
foreach(searcher.FindAll()中的SearchResult)
收益结果;
}
}
}

你提到了C。你想用C#中的哪个类?你想干什么?您提到了子域查询字符串。您正在尝试编写LDAP查询字符串吗?或者您正在尝试为System.DirectoryServices命名空间中的LDAP查询类(包括DirectorySearcher)指定路径。我正在尝试以编程方式编写多个LDAP字符串,使用递归方法来跟踪树,或者编写一个LDAP查询来搜索子域Active Directory服务器。还有,“巴斯路径”?对不起,输入错误-我是指你提到的“基本路径”。你想用C#中的哪个类?你想干什么?您提到了子域查询字符串。您正在尝试编写LDAP查询字符串吗?或者您正在尝试为System.DirectoryServices命名空间中的LDAP查询类(包括DirectorySearcher)指定路径。我正在尝试以编程方式编写多个LDAP字符串,使用递归方法来跟踪树,或者编写一个LDAP查询来搜索子域Active Directory服务器。还有“巴斯路径”?对不起,输入错误-我是说“基本路径”,我喜欢它,但这个森林非常复杂,有超过50万用户。这是我的问题的答案,但由于时间限制,我们将不得不走一段路