Как вы можете найти пользователя в Active Directory?
Некоторые примеры имен пользователей:
- avatopia\Иэн
- аватар\Иэн
- [email protected]
- [email protected]
- avatopia.com\Яну
Важно отметить, что я не знаю названия домена и я не должен его жестко кодировать.
Существует несколько пример кода при переполнении стека, который терпит неудачу.
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 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, но принятый ответ говорит, что вы должны
сначала найдите контекст именования для требуемый домен
i не знаю, что такое "контекст именования", и я не знаю, что такое "требуемый домен". я бы предпочел не писать регулярное выражение, чтобы попытаться проанализировать имена пользователей в именах доменов и именах учетных записей, например.
domain.something\user-name
в
domain.something
user-name
потому что я знаю, что будет какой-то крайний случай, что я ошибаюсь. Я хочу, чтобы соответствующий, предназначенный, способ поиска пользователя в активном каталоге.
Там хорошая страница в CodeProject Как сделать почти все в Active Directory, но вы не можете искать информацию пользователя по имени пользователя
Я бы надеялся, что могу дать моему контроллеру домена (кто бы он ни был, где бы он ни был, что бы он ни называл), имя пользователя, и он выяснит, к какому домену принадлежит пользователь, поговорите с этим контроллером домена и выполните работу.