当前位置: 首页 > 编程语言 > C#

如何获取-更新ActiveDirectory中的“联系人”?Share

时间:2023-04-10 13:39:15 C#

如何获取/更新ActiveDirectory中的“联系人”?有没有办法在ActiveDirectory中查找和更新联系人?我正在构建一个示例C#.NET应用程序来完成此操作。我将不胜感激任何代码。当然,您可以在System.DirectoryServices中执行此操作。我认为您真正需要的是学习如何使用System.DirectoryServices。如果你还没有一本好书,我推荐这本书。真的,这并不难。你只需要掌握两个类,DirectoryEntry和DirectorySearcher。DirectoryEntry表示LDAP服务器上的LDAP对象。假设您有足够的权限,您可以使用DirectoryEntry更改任何LDAP对象,包括联系人对象。每个LDAP对象都有许多属性。您需要了解的两个重要属性是objectCategory和objectClass。对于联系人对象,objectCategory应该是person,objectClass应该是contact。您还可以检查存储电子邮件地址的联系人对象的“targetAddress”属性。Contact对象上有许多Exchange扩展属性。您不妨一一检查。要浏览LDAP服务器上的对象,您可以使用ADExplorer或ADSIEdit等工具进行搜索,您需要为DirectorySearcher提供四样东西。SearchRootLDAPSearchFilterSearchScope返回属性如果您的计算机加入域并且您以域用户身份登录,以下是如何列出域中所有联系人的示例。DirectoryEntryrootDSE=newDirectoryEntry("LDAP://RootDSE");stringdomainContext=rootDSE.Properties["defaultNamingContext"].Valueasstring;DirectoryEntrysearchRoot=newDirectoryEntry("LDAP://"+domainContext);使用(DirectorySearchersearcher=newDirectorySearcher(searchRoot,"(&(objectCategory=person)(objectClass=contact))",newstring[]{"targetAddress"},SearchScope.Subtree)){foreach(SearchResultresultinsearcher.FindAll()){foreach(stringaddrinresult.Properties["targetAddress"]){Console.WriteLine(addr);}Console.WriteLine(result.Path);}}前三行是正确的LDAP路径,可帮助您找到域的根目录。它仅在您以域用户身份登录时才有效。如果您知道域的正确LDAP路径,则可以直接将其提供给DirectoryEntry。我将所有四个参数都放入DirectorySearcher。当您熟悉目录服务编程时,您可以跳过其中的一些内容,.NET将为您提供默认设置。DirectorySearcher返回的结果是SearchResult。请注意,即使targetAddress不是多值属性,SearchResult始终会返回一个对象数组。这是因为LDAP对象的某些属性可能是多值的。您可以从SearchResult获得的另一个重要信息是Path。您稍后可以使用此路径创建DirectoryEntry对象。要更新联系人对象,请使用其Properties方法和CommitChanges方法。DirectoryEntryde=newDirectoryEntry(result.Path);de.Properties["targetAddress"].Value="SMTP:jane.doe@foo.bar";de.CommitChanges();最后,您可以轻松地在网上找到很多教程。试试谷歌吧。我认为您的意思是更新ActiveDirectory中用户对象的属性。对的,这是可能的。在.Net3.5中,我们获得了System.DirectoryServices.AccountManagement命名空间,这使得处理AD比以前的System.DirectoryServices命名空间简单得多。通常,要修改用户的属性(如果您有权保存),您可以执行以下操作:stringsUserName="someusertoload";stringsDomain="test.local";stringsDefaultOU="OU=test,DC=test,DC=local";stringsServiceUser="userwithrights";字符串sServicePassword="somepassword";PrincipalContextoPrincipalContext=newPrincipalContext(ContextType.Domain,sDomain,sDefaultOU,ContextOptions.SimpleBind,sServiceUser,sServicePassword);UserPrincipaloUserPrincipal=UserPrincipal.FindByIdentity(oPrincipalContext,sUserName);oUserPrincipal.GivenName="新名字";oUserPrincipal.Save();你可以在这里找到一些辅助方法。.Net2.0的代码示例,用于检索用户名为“john”的用户并更新用户的街道地址。如果应用程序的运行用户没有编辑内容的权限,您可能必须将凭据添加到第一行。以上是C#学习教程:Howtoget/update"Contacts"inActiveDirectory?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——DirectoryEntryroot=newDirectoryEntry("LDAP://server/DC=test,DC=local");DirectorySearchersearcher=newDirectorySearcher(root,"(&(objectCategory=person)(objectClass=user)(sAMAccountName=john))");SearchResult结果=searcher.FindOne();DirectoryEntryuser=result.GetDirectoryEntry();user.Properties["streetAddress"][0]="我的街道12";用户.CommitChanges();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: