В данный момент я делаю некоторые запросы в активном каталоге, идентификатор пользователя нашей базы данных совпадает с идентификатором пользователя активного каталога.
Я передаю идентификатор пользователя вместе с доменом и путем, чтобы получить то, что мне нужно. Моя попытка состоит в том, чтобы получить адрес электронной почты менеджера из переданного идентификатора пользователя. То, что я возвращаю, когда получаю свойство менеджера, - это различающееся имя.
Поиск записи менеджера пользователя в Active Directory
Этот пост выше - моя точная проблема, но это старый пост, и в нем нет дальнейших описаний того, как двигаться вперед, и ОП знал, что делать дальше с выдающимся именем. Правда в том, что я не знаю.
Итак, мой вопрос: как мне получить свойство адреса электронной почты из отличительного имени, которое я до сих пор сохранил в виде строки с префиксом LDAP :// + "MyDistinguishedName"?
public string GetManagerEmail(string ActiveDirectoryPath, string ActiveDirectoryDomain, bool email)
{
DirectoryEntry entry = new DirectoryEntry(ActiveDirectoryPath);
try
{
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + workerID + ")";
search.PropertiesToLoad.Add("cn");
search.PropertiesToLoad.Add("givenname"); //firstname
search.PropertiesToLoad.Add("sn");//surname
search.PropertiesToLoad.Add("manager");
search.PropertiesToLoad.Add("email");
SearchResult result = search.FindOne();
if (null == result)
{
return workerID;
}
if (email)
{
return (string)result.Properties["email"][0];
}
else
{
return (string)result.Properties["manager"][0];
//return (string)result.Properties["manager"].IndexOf[];
}
}
catch (Exception ex)
{
throw new Exception("Error. " + ex.Message);
}
finally
{
entry.Close();
}
}
Выше приведен метод, который я использую для получения необходимых мне данных. Любой вклад или улучшения будут оценены.
Спасибо
ЭТО МОЕ РЕШЕНИЕ ДЛЯ ТЕХ, КТО МОЖЕТ ЗАИНТЕРЕСОВАТЬСЯ
string domainAndUsername = ActiveDirectoryDomain + @"\" + workerID;
DirectoryEntry manager = new DirectoryEntry(ActiveDirectoryPath);
try
{
if (manager != null)
{
// get e-mail of manager
if (manager.Properties["mail"] != null && manager.Properties["mail"].Count > 0)
{
string managersEMail = manager.Properties["mail"].Value.ToString();
return managersEMail;
}
}
//No email available, use contract manager
return string.Empty;
}
catch (Exception ex)
{
throw new Exception("Error. " + ex.Message);
}
finally
{
manager.Close();
}