2009-11-16 2 views
3

Я был погружен в глубокий конец с помощью Active Directory (я веб-разработчик, иди в фид) У меня есть пользователь, который изменил имя/фамилию, но полное имя не изменилось, что вызывает проблемы с совместным использованием базы данных BCM. Как обновить его, чтобы обновить полное имя.Обновление полного имени в Active Directory

Я понятия не имею, как работает AD, но по какой-то причине высшие взлеты решили, что это моя работа.

Любая помощь была бы действительно оценена.

ответ

3

Вы используете .NET 3.5? Если да, перейдите в эту статью MSDN: Managing Directory Security Principals in the .NET Framework 3.5.

проверить эту статью CodeProject: Howto: (Almost) Everything In Active Directory via C#

Заканчивать этот list of Code Samples для System.DirectoryServices на MSDN.

Если вы серьезно о программировании Active Directory в C# или VB.NET, пойти и купить эту книгу:

The .NET Developer's Guide to Directory Services Programming

alt text http://ecx.images-amazon.com/images/I/512V652XBSL._SL500_AA240_.jpg

Обновление "полное имя" (на самом деле: 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.

Надеюсь, это поможет!

Марк

UPDATE для .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(); 
} 
+0

Спасибо, я принял его, но не пробовал, .net 3.5 не установлен, и мне сказали не запускать какой-либо код или ничего не делать с Это. Так что в основном у меня есть проблема, которую мне сказали исправить, а затем сказал, что я не могу исправить. Снова благодарим за помощь. – digital

+0

какая версия .NET вы используете? 2,0? Я также обновляю свой пост с образцом для версии 2.0, это просто немного больше, чем хорошая версия 3.5. –

Смежные вопросы