8

現在、アクティブ ディレクトリでクエリを実行しています。データベースのユーザー 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();
        }
4

1 に答える 1

11

マネージャーの電子メールを取得するための「魔法の」近道はありません。

マネージャーの DN (識別名) を ( という文字列変数で) 取得したら、マネージャーのユーザー情報を取得するためにmanagerDNの別のインスタンスを作成して、Active Directory に再度バインドする必要があります。DirectoryEntry

次のようなことを試してください:

 .....(your other code up here)......
 else
 {
     string managerDN = result.Properties["manager"][0].ToString();

     // fully-qualified DN for manager
     string managerFQDN = "LDAP://" + managerDN;

     DirectoryEntry manager = new DirectoryEntry(managerFQDN);

     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;
        }
     }

     // we couldn't retrieve the manager's e-mail  
     return string.Empty;
}
于 2012-08-10T09:02:52.687 に答える