我已经被Active Directory深深吸引(我是一名网络开发人员,去图)我有一个用户,我已经更改了姓/名,但是全名没有改变,这是导致共享BCM数据库的问题。如何刷新它以更新全名。
我不知道AD是如何工作的,但出于某种原因,高层已经决定这是我的工作。
任何帮助都会非常感激。
答案 0 :(得分:3)
您使用的是.NET 3.5吗?如果是这样,请查看此MSDN文章:Managing Directory Security Principals in the .NET Framework 3.5。
查看此CodeProject文章:Howto: (Almost) Everything In Active Directory via C#
在MSDN上查看此list of Code Samples的System.DirectoryServices。
如果您认真对待C#或VB.NET中的Active Directory编程,请购买本书:
The .NET Developer's Guide to Directory Services Programming
更新“全名”(实际上是:DisplayName)应该像(在.NET 3.5上)一样简单:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "yourDomain");
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, "(your user name)");
if (up != null) // we found the user
{
up.DisplayName = "new display name for your user";
up.Save();
}
就是这样! :-)
请注意:您需要将NetBIOS域名(例如“MICROSOFT”) - 而不是DNS样式名称(microsoft.com)传递给PrincipalContext的构造函数。
希望这有帮助!
马克
.NET 2.0更新:
如果您在.NET 2.0上运行并且需要为用户更新“displayName”,那么这是代码,因为他的“SAMAccountName”(他的用户名没有域名,基本上):
// set the root for the search
DirectoryEntry root = new DirectoryEntry("LDAP://dc=yourcompany,dc=com");
// searcher to find user in question
DirectorySearcher ds = new DirectorySearcher(root);
// set options
ds.SearchScope = SearchScope.Subtree;
ds.Filter = string.Format("(&(sAMAccountName={0})(objectCategory=Person))", yourUserName);
// do we find anyone by that name??
SearchResult result = ds.FindOne();
if (result != null)
{
// if yes - retrieve the full DirectoryEntry for that user
DirectoryEntry userEntry = result.GetDirectoryEntry();
// set the "displayName" property to the new value
userEntry.Properties["displayName"].Value = yourNewUserFullName;
// save changes back to AD store
userEntry.CommitChanges();
}