用户未在AD搜索中列出

时间:2018-03-08 16:49:26

标签: c# active-directory

我正在用C#开发一个程序,搜索AD中的所有用户并将它们添加到列表中。不幸的是,我遇到了一个案例,其中没有将特定用户添加到该组中。

我用来创建列表的相关代码(在try / catch块中):

List<User> ADUsers = new List<User>();
string domainPath = "LDAP://DC=domain,DC=local";
search.Filter = "(&(objectClass=user))";
//I was including propertiesToLoad here, but I removed it in testing
SearchResultCollection results = search.FindAll();
if (results != null)
  {
    foreach (SearchResult result in results)
    {
      if (result.Properties.Contains("samaccountname") && result.Properties.Contains("mail") && result.Properties.Contains("displayname"))
      {
        User objSurveyUser = new User((String)result.Properties["samaccountname"][0], (String)result.Properties["mail"][0], (String)result.Properties["displayname"][0]);
        ADUsers.Add(objSurveyUser);
      }
    }
  }
return ADUsers;

我获得了900多个条目(正如预期的那样),到目前为止,我已经能够搜索我尝试过的每个用户但只有一个。

我在AD中检查了用户是否被归类为用户,因此我知道不应该过滤掉用户。我还验证了(在鬣狗中)Pre-2k帐户名(samaccountname),电子邮件地址(邮件)和显示名称都已列出并且对于此用户是正确的。

我创建了else块来捕获缺少上述一个或多个的用户并尝试以这种方式找到用户,但无济于事。

有没有人看到我的代码中可能遗漏的任何明显内容?

更新:我将搜索过滤器更改为(objectCategory=person),并且出现了一些我无法找到的用户。越来越近了。

更新2:我认为AD Searcher的工作方式可能存在问题。我将(objectCategory=person)更改为(|(objectCategory=person)(objectClass=user))。根据逻辑规则,我的返回大小应该增长;相反,它缩小了。 |A U B| >= |A|

更新3 :我已完全删除search.filter行,并尝试使用其他过滤器:(!(userAccountControl=2))。这两个选项都为我提供了基本OU中的完整用户列表,但它们不会在其他OU中搜索。

1 个答案:

答案 0 :(得分:0)

我将此代码添加到我的程序中以进行故障排除:tbText.text = $"Found {results.Count} AD entries."返回Found 1000 AD entries.该行保存了问题的关键。我不知道我的结果受到限制。快速搜索SO导致我this post

获得该信息后,我添加了相应的代码ds.PageSize = 500;,我的问题就解决了。