AD PrincipalSearcher: поиск, где свойство не содержит какого-либо значения
Похоже, что Major Searcher отлично справился с задачей при создании фильтра для поиска объекта с определенным значением. Как насчет без? Например, Как мне создать фильтр, чтобы исключить всех, у кого в имени указано "Джо". Код ниже не будет работать.
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal qbeUser = new UserPrincipal(ctx);
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
//this is the problem line. How to format to exclude values with Joe?
qbeUser.Name != "*Joe*";
srch.QueryFilter = qbeUser;
foreach (var found in srch.FindAll())
{ do something to non Joe users... }
....
1 ответ
Кажется, это невозможно с PrincipalSearcher
,
Два возможных обходных пути:
использование
PrincipalSearcher
получить всех пользователей и фильтровать на стороне клиентаPrincipalContext ctx = new PrincipalContext(ContextType.Domain); UserPrincipal qbeUser = new UserPrincipal(ctx); PrincipalSearcher srch = new PrincipalSearcher(qbeUser); srch.QueryFilter = qbeUser; foreach (var found in srch.FindAll()) { //filter out users with "Joe" in its name }
Используйте DirectorySearcher
DirectoryEntry de = new DirectoryEntry("LDAP://domain.com/dc=domain,dc=com", "user", "pwd"); DirectorySearcher srch = new DirectorySearcher(de); srch.Filter = "(&(objectCategory=person)(objectClass=user)(!(name=*Joe*)))"; srch.SearchScope = SearchScope.Subtree; // add the attributes srch.PropertiesToLoad.Add("distinguishedName"); using (SearchResultCollection results = srch.FindAll()) { foreach (SearchResult result in results) { string dn = result.Properties["distinguishedName"][0] as string; Console.WriteLine("- {0}", dn); } }