Я использую идентификатор пользователя (имя пользователя), чтобы получить его информацию от AD. Мне было интересно, можно ли использовать другие критерии, такие как фамилия, адрес электронной почты и т. Д., Чтобы сделать то же самое.Пользователь (ы) информация из Active Directory
Это то, что я пользователь, чтобы отфильтровать пользователей прямо сейчас:
string adPath = ConfigurationManager.AppSettings["ADPath"].ToString();
DirectoryEntry de = new DirectoryEntry(adPath);
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
string sFilter = String.Format("(&(objectClass=user)(SAMAccountName={0}))", UserID);
deSearch.Filter = sFilter;
deSearch.SearchScope = SearchScope.Subtree;
SearchResult results = deSearch.FindOne();
Спасибо.
Edited (используя предложение Mrc_S в):
using (adPrincipalContext)
{
UserPrincipal qbeUser = new UserPrincipal(adPrincipalContext);
qbeUser.GivenName = "Bruce";
qbeUser.Surname = "Miller";
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
foreach (var found in srch.FindAll())
{
UserPrincipal up = (UserPrincipal)found;
PrincipalSearchResult<Principal> psr = up.GetGroups();
List<Principal> insListPrincipal = new List<Principal>();
foreach (Principal p in psr)
{
insListPrincipal.Add(p);
}
foreach (Principal gp in psr)
{
string s1 = gp.Name;
string s2 = gp.Description;
}
Когда я пытаюсь найти группы принадлежит пользователю, в обоих (внутренних) Foreach петель, после одной итерации я получаю ошибки. Список («indListPrincipal») будет содержать 18 записей, первый - «Пользователи домена», остальные - ошибки для каждого свойства контекста. второй foreach просто умирает после первой итерации. Единственное, что я получаю, это группа «Пользователи домена». Кажется, что все результаты поиска удаляются после одной итерации. Что я делаю неправильно?
Спасибо. Похоже, что основным методом является FindByIdentity(). Могу ли я найти другие средства, такие как имя, фамилия, имя_пользователя, телефон, электронная почта и т. Д.? – NoBullMan
@NoBullMan: 'FindByIdentity' уже выполняет поиск по нескольким свойствам - подробнее просмотрите документы MSDN. Если вам нужен более гибкий поиск, проверьте «PrincipalSearcher» (также хорошо документированный на MSDN) –
Спасибо marc_s, я думаю, что получил! Только один вопрос: в цикле foreach я не вижу, чтобы можно было получить телефон пользователя («VoiceTelephoneNumber»). Должен ли я использовать «найденный» как любой желаемый тип, который я хочу, например, UserPrincipal? – NoBullMan