LDAP 搜索 returns 个比预期少的对象
LDAP search returns less objects than expected
我正在尝试从 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
开头的每个姓氏来强迫它吸引我。但为什么我使用的第一个搜索过滤器没有吸引所有用户?
why is the first search filter I am using not pulling all of the users in?
很可能是因为 SizeLimit kicks in at 1000 records. Set a 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()
});
}
}
- 小页面 = 更快的结果但更多的服务器往返,更大的页面大小 = 更慢的结果但更少的服务器往返。选择适合您的值。
- 您必须手动处理
SearchResultCollection
,请参阅 the MSDN documentation of DirectorySearcher.FindAll()
中的 "Remarks"。 using
块将正确处理对象。
我正在尝试从 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
开头的每个姓氏来强迫它吸引我。但为什么我使用的第一个搜索过滤器没有吸引所有用户?
why is the first search filter I am using not pulling all of the users in?
很可能是因为 SizeLimit kicks in at 1000 records. Set a 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()
});
}
}
- 小页面 = 更快的结果但更多的服务器往返,更大的页面大小 = 更慢的结果但更少的服务器往返。选择适合您的值。
- 您必须手动处理
SearchResultCollection
,请参阅 the MSDN documentation ofDirectorySearcher.FindAll()
中的 "Remarks"。using
块将正确处理对象。