Обновить пользователя с помощью DirectoryService - PullRequest
1 голос
/ 22 декабря 2011

Я пишу небольшое приложение, которое обновляет мою AD с помощью информации из таблицы БД, но не может найти примеры лучших практик.

Насколько я понимаю, мне нужно:

  • создайте DirectorySearcher с фильтром objectClass=user и ищите данный cn
  • если найдено, мне нужно использовать result.getDirectoryEntry, чтобы получить указатель на фактический объект,
  • Обновите все значения до entryobject, используя значения из БД, и затем внесите изменения

Это или я полностью потерян, любые намеки или примеры приветствуются

1 Ответ

1 голос
/ 22 декабря 2011

Если вы используете .NET 3.5 и выше, вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM).Прочитайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   // update the properties you need to 
   user.DisplayName = "Joe Blow";
   user.Description = "Some description";

   // save back your changes
   user.Save();
}

Новый S.DS.AM позволяет действительно легкопоиграйтесь с пользователями и группами в AD!

Если вам нужно искать целую группу пользователей, вы можете использовать PrincipalSearcher и принцип «запрос по примеру» для поиска:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// and with the first name (GivenName) of "Bruce"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Bruce";

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
    UserPrincipal user = found as UserPrincipal;

    if(user != null)
    {
       // update the properties you need to 
       user.DisplayName = "Joe Blow";
       user.Description = "Some description";

       // save back your changes
       user.Save();
    }
}

Вы можете указать любое из свойств в UserPrincipal и использовать их в качестве «запроса по примеру» для PrincipalSearcher.

...