在Active Directory中更新全名

时间:2009-11-16 10:21:51

标签: active-directory windows-server-2003

我已经被Active Directory深深吸引(我是一名网络开发人员,去图)我有一个用户,我已经更改了姓/名,但是全名没有改变,这是导致共享BCM数据库的问题。如何刷新它以更新全名。

我不知道AD是如何工作的,但出于某种原因,高层已经决定这是我的工作。

任何帮助都会非常感激。

1 个答案:

答案 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

alt text

更新“全名”(实际上是: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();
}