2011-01-28 77 views
1

我正在尝试从Active Directory中获得具有指定经理的用户列表。 我以前没有成功以下LDAP过滤器:Active Directory搜索 - 按管理员筛选

(manager=CN=Misterboss_n*) 

但是,它不返回结果。用户在管理器属性中具有以下值:

"CN=Misterboss_n,OU=xyz user,DC=xyz,DC=local" 

我在做什么错?如果我用这样的东西替换上面的过滤器:

(givenName=John*) 

它工作正常(返回给定名称为John的所有用户)。

更广阔的背景:

public List<ADUserDetail> GetAllEmployeesUnderMisterboss() 
     { 
      List<ADUserDetail> userlist = new List<ADUserDetail>(); 
      string filter = ""; 
      _directoryEntry = null; 
      DirectorySearcher directorySearch = new DirectorySearcher(SearchRoot); 
      directorySearch.Asynchronous = true; 
      directorySearch.CacheResults = true; 
      filter = "(manager=CN=Misterboss_n*)"; 
      directorySearch.Filter = filter; 
      SearchResultCollection userCollection = directorySearch.FindAll(); 
      foreach (SearchResult users in userCollection) 
      { 
       DirectoryEntry userEntry = new DirectoryEntry(users.Path, LDAPUser, LDAPPassword); 
       ADUserDetail userInfo = ADUserDetail.GetUser(userEntry); 
       userlist.Add(userInfo); 
      } 
      return userlist; 
     } 

感谢您的帮助!

回答

1

我不认为有可用于DN类型属性的开始字段搜索。您将不得不使用经理的完整DN。如果您不知道完整的DN,请首先找到管理器的LDAP对象,然后使用它的distinguishedName属性。

一定要escape the DN value properly建立过滤器,然后 - 不是每一个有效的DN字符也是一个LDAP过滤器表达式有效:

* as \2a 
( as \28 
) as \29 
\ as \5c 
NUL as \00 
/ as \2f 

对于代码示例,请参阅此相关的主题,我回答了非常类似的问题:Getting all direct Reports from Active Directory

+0

Thanks Tomalak! 使用完整的DN解决了这个问题。 – Marton 2011-01-28 10:59:19