c# – 如何在Active Directory中获取/更新“联系人”?
有没有办法在Active Directory中查找和更新联系人?我正在构建一个示例C#.NET应用程序来完成此任务.我会很感激任何代码.
解决方法
当然,您可以在System.DirectoryServices中执行此操作.
我认为你真正需要的是学习如何使用System.DirectoryServices.如果你还没有好书,我推荐this one. 真的,这并不难.您只需要掌握两个类,DirectoryEntry和DirectorySearcher. DirectoryEntry表示LDAP服务器上的LDAP对象.假设您具有足够的权限,则可以使用DirectoryEntry对任何LDAP对象(包括联系人对象)进行更改.每个LDAP对象都具有许多属性.您需要知道的两个重要属性是objectCategory和objectClass.对于contact对象,objectCategory应该是person,而objectClass应该是contact.您还可以检查联系对象上的“targetAddress”属性,该属性存储电子邮件地址.联系人对象上有许多Exchange扩展属性.您可能希望逐一检查每一个.要浏览LDAP服务器上的对象,可以使用AD Explorer或ADSI Edit之类的工具 要进行搜索,您需要向DirectorySearcher提供四件事. >搜索root 如果您的计算机已加入域并且您以域用户身份登录,则以下是有关如何列出域中所有联系人的示例. DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"); string domainContext = rootDSE.Properties["defaultNamingContext"].Value as string; DirectoryEntry searchRoot = new DirectoryEntry("LDAP://" + domainContext); using (DirectorySearcher searcher = new DirectorySearcher( searchRoot,"(&(objectCategory=person)(objectClass=contact))",new string[] {"targetAddress"},SearchScope.Subtree)) { foreach (SearchResult result in searcher.FindAll()) { foreach (string addr in result.Properties["targetAddress"]) { Console.WriteLine(addr); } Console.WriteLine(result.Path); } } 前三行是帮助您找到域的根目录的正确LDAP路径.仅当您以域用户身份登录时,它才有效.如果您知道域的正确LDAP路径,则可以直接将其提供给DirectoryEntry. 我将所有四个参数都放到DirectorySearcher中.当您熟悉目录服务编程时,可以跳过其中的一些,.NET将为您提供默认值. 从DiectorySearcher返回的结果是SearchResult.请注意,即使targetAddress不是多值属性,SearchResult也始终向您返回一组对象.这是因为LDAP对象上的某些属性可能是多值的. 您可以从SearchResult获得的另一个重要信息是Path.您可以稍后使用此路径创建DirectoryEntry对象.要更新联系对象,需要使用其Properties方法和CommitChanges方法. DirectoryEntry de = new DirectoryEntry(result.Path); de.Properties["targetAddress"].Value = "SMTP:jane.doe@foo.bar"; de.CommitChanges(); 最后,你可以在DirectorySearcher和DirectoryEntry上轻松找到很多在线教程.试试google吧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |