Управление пользователями на удаленном сервере Windows с использованием C # System.DirectoryServices - PullRequest
2 голосов
/ 08 июля 2010

Я написал программу, которая открывает соединение с удаленным сервером Windows для управления локальными учетными записями (не Active Directory).Программа выполняет следующие шаги:

  • Создание пользователя
  • Добавление пользователя в группу

Оба метода используют System.DirectoryServices.AccountManagement, здесьдве функции:

public void CreateUser()
    {
        PrincipalContext pc = new PrincipalContext(ContextType.Machine,
            "host_ip",
            "adminaccount",
            "adminpassword");
        UserPrincipal up = new UserPrincipal(pc);

        up.Name = "user";
        up.DisplayName = "user";
        up.SetPassword("user");
        up.Description = "user";
        up.UserCannotChangePassword = true;
        up.PasswordNeverExpires = true;
        try
        {
            up.Save();
        }
        catch (Exception ex)
        {
        }
        try
        {
            AddToGroup(pc, up);
        }
        catch (Exception ex)
        {
        }
    }

    private void AddToGroup(PrincipalContext pc, UserPrincipal u)
    {
        string group = "Remote Desktop Users";

        GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(pc, group);
        if (groupPrincipal.Members.Contains(pc, IdentityType.SamAccountName, u.SamAccountName)) //error occurs here
        {
            return;
        }
        groupPrincipal.Members.Add(u);
        try
        {
            groupPrincipal.Save();
        }
        catch (Exception e)
        {
        }
    }

Работает с утра, создание пользователя всегда завершается успешно, но я получаю эту ошибку в строке:

  • if (groupPrincipal.Members.Contains (pc, IdentityType.SamAccountName, u.SamAccountName))

Произошла ошибка (1332) при перечислении членства в группе.SID участника не может быть решен.

Спасибо за ваши ответы

1 Ответ

3 голосов
/ 08 июля 2010

Не уверен, поможет ли это, но согласно этому отчету на Microsoft Connect это может быть связано:

В текущем выпуске перечисления группы System.DirectoryServices.AccountManagement есть требование, чтобы все объекты в группе были доступны или возникло исключение. То, что вы видите, это объект из локальной группы, которого больше нет в ActiveDirectory. Поскольку система не будет автоматически удалять эти ссылки, каждый раз, когда эта группа будет перечисляться, произойдет сбой. Чтобы предотвратить эту ошибку, удалите ссылку на объект в ActiveDirectory, который больше не существует. Мы изучаем возможность внесения изменений в API в будущем выпуске, которые облегчили бы работу со сценариями, подобными этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...