2011-01-28 91 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