Как найти пользователя в Active Directory?
Некоторые примеры имен пользователей:
- аватопия\ян
- аватар\ианин
- [email protected]
- [email protected]
- avatopia.com\ian
Важно отметить, что я не знаю имени домена, и я не должен жестко кодировать его.
В стеке есть пример кода . переполнение, которое не удается.
using System.DirectoryServices;
/// <summary>
/// Gets the email address, if defined, of a user from Active Directory.
/// </summary>
/// <param name="userid">The userid of the user in question. Make
/// sure the domain has been stripped first!</param>
/// <returns>A string containing the user's email address, or null
/// if one was not defined or found.</returns>
public static string GetEmail(string userid)
{
DirectorySearcher searcher;
SearchResult result;
string email;
// Check first if there is a slash in the userid
// If there is, domain has not been stripped
if (!userid.Contains("\\"))
{
searcher = new DirectorySearcher();
searcher.Filter = String.Format("(SAMAccountName={0})", userid);
searcher.PropertiesToLoad.Add("mail");
result = searcher.FindOne();
if (result != null)
{
email = result.Properties["mail"][0].ToString();
}
}
return email;
}
Это специально гарантирует, что вы не передали полное имя пользователя. например
Bad: avatopia\ian
Bad: avatar\ian
Good: ian
Good: ian
Поскольку вам не разрешено передавать домен, он не может различать двух пользователей.
ian
ian
У другого парня есть тот же вопрос о sackoverflow. , но принятый ответ говорит, что вы должны
сначала найдите контекст именования для требуемого домена
я не знаю, что такое "контекст именования", и я не знаю, что "требуемый домен" есть. я действительно предпочел бы не писать регулярное выражение, чтобы попытаться разобрать имена пользователей на доменные имена и имена учетных записей, например.
domain.something\user-name
в
domain.something
user-name
потому что я знаю, что будет какой-то пограничный случай, в котором я ошибусь. мне нужен правильный, предполагаемый метод поиска пользователя в активном каталоге.
В CodeProject есть хорошая страница Как делать почти все в Active Directory, но вы не можете искать информацию о пользователе по имени пользователя
я надеюсь, что смогу передать свой контроллер домена (кто бы он ни был , где бы он ни находился, как бы он ни назывался) имя пользователя, и он выяснит, к какому домену принадлежит этот пользователь, пообщается с этим контроллером домена и выполнит свою работу.