2009-10-02 208 views
3

我想找到所有在某一OU的組的成員的用戶,所以我的過濾器會是這個樣子:LDAP的DirectorySearcher用的memberOf屬性

(&(objectClass的=用戶)(的memberOf = * OU = something,OU = yep,DC = dev,DC = local))

有沒有辦法在memberof屬性上使用通配符運行directorysearcher?

回答

0

請勿指定memberOf子句。

0

請勿指定memberOf子句。只需使用"(objectClass=user)"

8

您需要設置OU您要搜索作爲您的DirectorySearcher根:

DirectoryEntry myOU = new DirectoryEntry("OU=something,OU=yep,DC=dev,DC=local"); 
DirectorySearcher srch = new DirectorySearcher(myOU); 
srch.SearchScope = SearchScope.Subtree; 

,然後只使用objectCategory =人對你的過濾器 - 我會用objectCategory是單-valued和索引,從而快速,而不是對象類(這是多值和沒有索引):

srch.Filter = "(objectCategory=person)"; 

如果你仍然想除了檢查會員組中,以作爲OU的一部分,您可以將此添加爲成員部分過濾器:

srch.Filter = "(&(objectCategory=person)(memberOf=cn=Group,ou=yep,dc=dev,dc=local))"; 

不能完全確定有關通配符 - 一般來說,LDAP搜索過濾器做支持通配符,但我有點猶豫的RDN使用通配符這樣的組DN在這裏。

馬克

2

this thread,對於DNS通配符搜索在Active Directory中不支持。

0

這裏是我是如何做到這 是LDAP名 是,你需要會員

DirectoryEntry entry = new DirectoryEntry("LDAP://<COMPANYLDAP>/CN=<Group Name>,OU=something,OU=yep,DC=dev,DC=local"); 
DirectorySearcher Dsearch = new DirectorySearcher(entry); 
SearchResult sResultSet = Dsearch.FindOne(); 
GetProperty(sResultSet, "member"); 



public static void GetProperty(SearchResult searchResult, string PropertyName) 
     { 
      StringBuilder strb = new StringBuilder(); 
      if (searchResult.Properties.Contains(PropertyName)) 
      { 

       ResultPropertyValueCollection rc = searchResult.Properties[PropertyName]; 
       foreach (string name in rc) 
       { 
        DirectoryEntry entry = new DirectoryEntry("LDAP://<COMPANYLDAP>/" + name); 
        DirectorySearcher Dsearch = new DirectorySearcher(entry); 
        //Dsearch.Filter = name; 
        SearchResult sResultSet = Dsearch.FindOne(); 
        strb.AppendLine(GetPropertyvalue(sResultSet, "displayname") + "," + GetPropertyvalue(sResultSet, "mail")); 
       } 


      } 

      File.WriteAllText(strb.ToString(), "c:\\Users.txt"); 
     } 
相關問題