【问题标题】:LDAP search returns less objects than expectedLDAP 搜索返回的对象少于预期
【发布时间】:2015-12-16 15:42:09
【问题描述】:

我正在尝试从 Active Directory 中提取 每个 用户。我目前正在使用这种方法:

        DirectorySearcher search = new DirectorySearcher();            
        search.Filter = "(objectClass=user)";
        foreach (SearchResult result in search.FindAll())
        {
            if(result.Properties["mail"].Count > 0 && result.Properties["displayName"].Count > 0)
            {
                emailAddresses.Add(new EmailDetails
                {
                    EmailAddress = result.Properties["mail"][0].ToString(),
                    EmailDisplayName = result.Properties["displayName"][0].ToString()
                });
            }
         }

这只是我期望的名字的大约 3/4。这是为了让我离开......所以我很好奇并添加了一个新过滤器,看看我是否可以通过将过滤器更改为这样来拉动自己:

search.Filter = "(&(objectClass=user)(sn=za*))";

事实上,这确实正确地吸引了我,我基本上是通过设置过滤器来搜索以za 开头的每个姓氏来强迫它吸引我。但是为什么我使用的第一个搜索过滤器没有吸引所有用户呢?

【问题讨论】:

  • 它返回了多少用户?您说的是 3/4,但它是否返回一个确切的数字,例如 100、500、1000 等?返回的结果可能存在服务器端限制。另外,既然您只寻找拥有maildisplayName 的用户,为什么不首先将它们添加到ldap 过滤器中呢?效率更高。
  • 它返回 644,从我读到的服务器端限制是 1000

标签: c# active-directory ldap ldap-query


【解决方案1】:

为什么我使用的第一个搜索过滤器没有吸引所有用户?

很可能是因为SizeLimit 有 1000 条记录。设置PageSize 以启用结果分页。

在没有过滤器的情况下执行.FindAll() 然后在客户端过滤结果是愚蠢的。写一个合适的过滤器。

var search = new DirectorySearcher();            
search.Filter = "(&(objectClass=user)(mail=*)(displayName=*))";
search.PageSize = 1000;  // see 1.

using (var results = searcher.FindAll()) {  // see 2.
    foreach (var result in results)
    {
        emailAddresses.Add(new EmailDetails
        {
            EmailAddress = result.Properties["mail"][0].ToString(),
            EmailDisplayName = result.Properties["displayName"][0].ToString()
        });
    }
}
  1. 小页面大小 = 更快的结果,但更多的服务器往返,更大的页面大小 = 更慢的结果,但更少的服务器往返。选择适合您的价值观。
  2. 您必须手动处理SearchResultCollection,请参阅the MSDN documentation of DirectorySearcher.FindAll() 中的“备注”。 using 块将正确处理对象。

【讨论】:

  • 谢谢。这是完全有道理的,很好的解释。
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多