【问题标题】:LDAP Query Search Depth ProblemLDAP 查询搜索深度问题
【发布时间】:2011-01-26 18:03:01
【问题描述】:

我正在尝试通过从 AD 中提取 OU 名称和电话号码来创建电话目录。在搜索当前 OU 中是否填写了电话字段并且该 OU 具有也包含电话字段的子 OU 时,这些用户帐户也将被返回。例如:

美国

---德州

---佛罗里达

---纽约

我正在尝试查找在美国 OU 中填写了电话字段的所有用户,但它是来自德克萨斯州、佛罗里达州和纽约的回访用户。有没有办法限制 LDAP 搜索的深度?

我正在使用 c#,而我当前的过滤器来查找用户只是

(&(objectClass=user)(objectCategory=person))

任何帮助将不胜感激!

【问题讨论】:

  • 所以你只想要“root”OU“USA”中的用户?
  • 您可以使用 (telephoneNumber=*) 按存在的电话号码进行过滤,或者根据您需要的字段将电话号码更改为另一个属性。我们这里有 Cisco IP 电话,所以我们使用 (ipPhone=*)。

标签: c# active-directory ldap


【解决方案1】:

我假设您使用DirectorySearcher 进行 LDAP 查询。您可以通过将 DirectorySearcher.SearchScope 设置为 SearchScope.OneLevel 来限制在 USA OU 级别上的搜索。

这是一个可能看起来像的示例

IEnumerable<DirectoryEntry> FindUsers(DirectoryEntry root)
{
    using (DirectorySearcher searcher = new DirectorySearcher(root))
    {
        searcher.Filter = "(&(objectClass=user)(objectCategory=person))";
        searcher.SearchScope = SearchScope.OneLevel;
        searcher.PageSize = 1000;
        foreach (SearchResult result in searcher.FindAll())
        {
            yield return result.GetDirectoryEntry();
        }
    }
}

【讨论】:

  • 感谢您的回复,我不知道 SearchScope,这正是我所需要的!
  • @sport001 如果您想知道为什么我在示例中包含 PageSize = 1000,请阅读我的另一篇文章 stackoverflow.com/questions/4693284/…。在几乎所有情况下,您都希望设置 PageSize = 1000,以便您可以根据需要返回尽可能多的结果
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2013-11-30
  • 2021-02-06
  • 2013-07-19
  • 1970-01-01
相关资源
最近更新 更多