我希望使用C#编写的应用程序定期更新数据库中的用户表,其中包含Active Directory上所有用户的名称和电子邮件地址。我使用DirectorySearcher检索用户。
DirectorySearcher dirSearch = new DirectorySearcher();
dirSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
dirSearch.PropertiesToLoad.Add("mail");
SearchResultCollection resultCol = dirSearch.FindAll();
这会返回系统上的用户列表,但只返回一个用户的电子邮件地址。
我承认我在Active Directory和IT管理员等方面的经验有限。我们正在寻找正确的位置来检索此类信息吗?
非常感谢您的帮助!
答案 0 :(得分:1)
Active Directory可能可选。意思是,它们可能存在或者可能不存在。
这与关系数据库有很大不同,在关系数据库中,将始终为记录返回所有列(尽管它们可能包含null
个值)。
因此,在您的情况下,只有一个用户拥有电子邮件地址,您可能会认为缺少值为null
。
答案 1 :(得分:0)
首先在评论中回答您的问题,是Active Directory链接到Exchange。事实上,Exchange高度依赖Active Directory,99%的Exchange用户级别设置都存储在Active Directory中。 Exchange使用AD作为其用户设置数据库,如果查看AD中的用户属性列表,您可以找到以" msexch"开头的数十个属性名称。
回到主要问题,邮件不是Exchange服务器使用的电子邮件地址的正确属性。您需要查询的正确AD属性是 proxyaddresses 。请注意它是一个多值属性,因为用户可以拥有多个电子邮件地址。例如,如果它是我的帐户:
smtp:dongmao@company.com
smtp:dong_mao@company.com
SMTP:maodong@company.com
smtp:mao_dong@company.com
使用大写SMTP的地址是主电子邮件地址,而其他地址都是次要的。如果您想向我发送电子邮件,可以使用所有这些。
总之,要实现你想要的目标
然后使用什么邮件属性?
它是AD中的联系人属性,用于提供必要的联系信息。就像电话号码,手机号码,办公室,物理地址等一样。它在您的组织中没有安装任何电子邮件系统。
在早期版本的Exchange(< 2007)中,Exchange始终保持邮件和主SMTP地址的值同步。从Exchange 2007启动,Exchange仅在Exchange管理员运行Set-Mailbox时执行同步操作。因此,它们可能不同步,或者用户的价值可能是空白的。