c# – 查询Active Directory直接获取专有名称的email属性?

前端之家收集整理的这篇文章主要介绍了c# – 查询Active Directory直接获取专有名称的email属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在在活动目录中进行一些查询,我们的数据库用户ID与活动目录用户ID的匹配.

我传递用户ID以及域和路径以获得我需要的东西.我的努力是从传递的用户ID获取经理的电子邮件地址.当我获得manager属性时,我返回的是可分辨名称.

@L_301_0@

上面的帖子是我的确切问题,但它是一个旧帖子,并且没有关于如何前进的进一步描述,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();
        }

解决方法

获取经理的电子邮件没有“神奇”的捷径.

一旦检索到管理器的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;
}

猜你在找的C#相关文章