LDAP DirectorySearcher со свойством MemberOf - PullRequest
3 голосов
/ 02 октября 2009

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

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

Есть ли способ запустить поиск каталогов в свойстве memberof с подстановочным знаком?

Ответы [ 5 ]

9 голосов
/ 02 октября 2009

Вам необходимо установить OU, который вы хотите найти, в качестве корня вашего DirectorySearcher:

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

и затем используйте только objectCategory = person для вашего фильтра - я бы использовал objectCategory, которая имеет одно значение и индексируется и, следовательно, быстрее, чем objectClass (который является многозначным и не индексируется):

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

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

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

Не совсем уверен насчет подстановочных знаков - в общем, фильтры поиска LDAP поддерживают подстановочные знаки, но я немного сомневаюсь в использовании подстановочного знака в RDN, подобном этому DN группы.

Марк

2 голосов
/ 02 октября 2009

Согласно этой теме , поиск по DN для подстановочных знаков не поддерживается в Active Directory.

0 голосов
/ 24 января 2011

Вот как я это сделал это имя 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");
        }
0 голосов
/ 02 октября 2009

Не указывайте предложение memberOf. Просто используйте "(objectClass=user)"

0 голосов
/ 02 октября 2009

Не указывайте предложение memberOf.

...