現在、アクティブ ディレクトリでクエリを実行しています。データベースのユーザー ID がアクティブ ディレクトリのユーザー ID と一致しています。
必要なものを取得するために、ドメインとパスとともにユーザー ID を渡しています。私の努力は、渡されたユーザー ID からマネージャーの電子メール アドレスを取得することです。manager プロパティを取得したときに返されるのは、識別名です。
Active Directory でユーザーのマネージャー レコードを検索する
この上記の投稿は私の正確な問題ですが、それは古い投稿であり、先に進む方法についての説明はなく、OP は識別名で次に何をすべきかを知っていました。真実は、私はしません。
私の質問は、これまで 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();
}