How can I search users in Active Directory based on surname and first name?
I'm trying to search for users in AD with their surname (sn
) and first name (givenName
) с помощью DirectorySearcher
in.NET.
I can find a user based on sAMAccountname
с этим кодом:
DirectorySearcher searcher1 = new DirectorySearcher(entry);
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(SAMAccountname={0}))",aLogin);
SearchResult results1;
results1 = searcher1.FindOne();
But when I try to do it with givenName
а также sn
:
DirectorySearcher searcher1 = new DirectorySearcher(entry);
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1})", aName, aSName);
SearchResultCollection results1;
results1 = searcher1.FindAll();
Это не работает; the message says "Invalid Filter";
Can I not filter based on givenName
а также sn
?
Как мне этого добиться?
3 ответа
В вашем фильтре отсутствуют закрывающие скобки. Пытаться:
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1}))", aName, aSName);
Если вы используете.NET 3.5 или новее, вы также можете использовать PrincipalSearcher
и принцип "запрос за примером" для поиска:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
// and with the first name (GivenName) of "Bruce" and a last name (Surname) of "Miller"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Bruce";
qbeUser.Surname = "Miller";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
}
Если вы еще этого не сделали - обязательно прочитайте статью MSDN " Управление принципами безопасности каталогов" в.NET Framework 3.5, которая показывает, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement
, Или см. Документацию MSDN в пространстве имен System.DirectoryServices.AccountManagement.
Конечно, в зависимости от ваших потребностей, вы можете захотеть указать другие свойства для этого пользовательского субъекта "запрос за примером", который вы создаете:
DisplayName
(обычно: имя + пробел + фамилия)SAM Account Name
- имя вашей учетной записи Windows/ADUser Principal Name
- ваше имя в стиле "username@yourcompany.com"
Вы можете указать любое из свойств на UserPrincipal
и использовать их как "запрос за примером" для вашего PrincipalSearcher
,