Consulta Diretório ativo para obter diretamente a propriedade de email de um nome distinto?
Eu estou fazendo algumas consultas no diretório ativo no momento, nosso ID de usuário do banco de dados corresponde ao ID do usuário do diretório ativo.
Estou passando o id do usuário junto com o domínio e o caminho para conseguir o que preciso. Meu esforço é obter o endereço de e-mail do gerente do ID do usuário passado. O que estou retornando quando obtenho a propriedade gerente é o nome distinto.
Localizando o registro do gerenciador de usuários no Active Directory
Este post acima é o meu problema exato, mas é um post antigo e não há mais descrições sobre como avançar e o OP sabia o que fazer em seguida com o nome distinto. A verdade é que não sei.
Então, minha pergunta é: como obter a propriedade de endereço de e-mail do nome distinto que até agora armazenei como uma string com um prefixo de 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();
}
}
Acima está o método que uso para obter os dados de que preciso. Qualquer entrada ou melhorias seria apreciada.
obrigado
ESTA É A MINHA SOLUÇÃO PARA OS QUE PODEM SER INTERESSADOS
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();
}