【问题标题】:How to get a list of all objects under organization unit from LDAP?如何从 LDAP 获取组织单位下所有对象的列表?
【发布时间】:2018-07-09 22:42:21
【问题描述】:

如何获取位于 LDAP 组织单元内的每个用户和/或组的列表?

我正在尝试使用c# 查询我的LDAP 服务器。我想获得所有分发列表的列表。我的所有分发列表都归入一个称为“常规分发”的组织单元 (OU)。如何获取“General Distributions”OU 下所有成员的列表?

下面是我用来查询LDAP 服务的代码,它没有返回任何结果。

try
{
        DirectoryEntry objADAM = new DirectoryEntry("LDAP://my_domain.com", "user@my_domain.com", "password");

        DirectorySearcher objSearchADAM = new DirectorySearcher(objADAM);
        objSearchADAM.Filter = "(&(OU=General Distributions,DC=my_domain,DC=com)"; 
        objSearchADAM.SearchScope = SearchScope.Subtree;
        SearchResultCollection objSearchResults = objSearchADAM.FindAll();


        // Binding path. 
        List<string> result = new List<string>();

        if (objSearchResults.Count != 0)
        {
            foreach (SearchResult objResult in objSearchResults)
            {
                DirectoryEntry objGroupEntry = objResult.GetDirectoryEntry();
                result.Add(objGroupEntry.Name);
            }

            return result;
        }

        throw new Exception("No result found");
}
catch (Exception e)
{
        throw e;
}

【问题讨论】:

  • 如果您将过滤器更改为类似于:objSearchADAM.Filter = $"(&amp;(memberOf=General Distribution)(objectClass=user))" 并将范围添加到您的 DirectoryEntry,会发生什么情况:LDAP://my_domain.com/OU=[higherLevelOu];Distributions,DC=my_domain,DC=com
  • 没有更高的OU。不知道该放什么,但使用 (&amp;(memberOf=General Distribution)(objectClass=user)) 不起作用

标签: c# ldap directoryentry directorysearcher ou


【解决方案1】:

我知道这个问题有点老了,但答案很简单。使用 OU 本身作为 DirectoryEntry 您正在使用的 SearchRoot

DirectoryEntry objADAM = new DirectoryEntry(
    "LDAP://my_domain.com/OU=General Distributions,DC=my_domain,DC=com",
    "user@my_domain.com", "password");

DirectorySearcher objSearchADAM = new DirectorySearcher(objADAM);
objSearchADAM.Filter = "(|(objectClass=user)(objectClass=group))"; //only get users and groups
objSearchADAM.SearchScope = SearchScope.Subtree;
SearchResultCollection objSearchResults = objSearchADAM.FindAll();

【讨论】:

  • 阅读答案后听起来很明显。在 Ruby 中,等价于 Net::LDAP.new.search 方法的 treebase 参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多