2009-10-02 2 views
3

Я хочу, чтобы найти всех пользователей, которые являются членами группы в определенном подразделении, так что мой фильтр будет выглядеть примерно так:LDAP DirectorySearcher с MemberOf свойство

(& (объектный = пользователя) (memberOf = * OU = что-то, OU = yep, DC = dev, DC = local))

Есть ли способ запустить directorysearcher для свойства 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, который холост значной и индексируются и, таким образом, быстро, а не объектный (который является многозначным и не индексируются):

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

Если вы все еще хотите, чтобы проверить членство в группе, в дополнение к тому, часть OU, вы можете добавьте это как член часть к фильтру:

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

Не совсем уверена, о подстановочных знаках - в общем, поиске LDAP фильтры Поддерживают подстановочные знаки, но я немного колеблющимся об использовании маски в РДНЕ, как эта группа 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"); 
     } 
Смежные вопросы