Подтвердить что ты не робот

Создание пользователя Active Directory с паролем в С#

Я ищу способ создать пользователей Active Directory и установить их пароль, желательно, не предоставляя свои права доступа к Администрированию домена/службы.

Я пробовал следующее:

DirectoryEntry newUser = _directoryEntry.Children.Add("CN=" + fullname, USER);
newUser.Properties["samAccountName"].Value = username;
newUser.Properties["userPassword"].Value = password;
newUser.Properties["mail"].Value = email;
newUser.CommitChanges();

Пользователь создан, но кажется, что пароль никогда не установлен для пользователя.

Есть ли у кого-нибудь идея о том, как правильно установить пароль пользователя при создании пользователя? Я знаю о

.Invoke("SetPassword", new object[] { password })

Но для этого требуется, чтобы мой код запускался с правами администратора домена. Поскольку я действительно не вижу смысла предоставлять свои права доступа к Domain Domain, просто установите начальный пароль (я также разрешаю сброс пароля пользователя, но те, которые выполняются в контексте этого конкретного пользователя), я надеюсь, что у кого-то умный решение, которое не требует от меня этого.

Спасибо заранее!

4b9b3361

Ответ 1

Теперь вы можете сделать весь этот процесс намного проще с помощью System.DirectoryServices.AccountManagement(если вы на .Net 3.5):

См. здесь полное описание

Вот краткий пример вашего конкретного случая:

using(var pc = new PrincipalContext(ContextType.Domain))
{
  using(var up = new UserPrincipal(pc))
  {
    up.SamAccountName = username;
    up.EmailAddress = email;
    up.SetPassword(password);
    up.Enabled = true;
    up.ExpirePasswordNow();
    up.Save();
  }
}

Ответ 2

Я бы использовал код @Nick (завернутый в операторы using, чтобы контекст и основной объект были правильно расположены). Что касается привилегий, вам нужно, по крайней мере, иметь достаточно привилегий в OU, где вы создаете пользователя для создания и управления объектами. Я бы создал конкретного пользователя, под которым будет запускаться ваша программа, и предоставит ему достаточно привилегий для выполнения задач, которые ему нужны в этом конкретном подразделении и не более.

Ответ 3

Да также может использовать нижеприведенный код для создания большого количества пользователей

DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=TestOU,DC=TestDomain,DC=local");

        for (int i = 0; i < 10; i++)
        {
            try
            {
                DirectoryEntry childEntry = ouEntry.Children.Add("CN=TestUser" + i,  "user");
                childEntry.CommitChanges();
                ouEntry.CommitChanges();
                childEntry.Invoke("SetPassword", new object[] { "password" });
                childEntry.CommitChanges();
            }
            catch (Exception ex)
            {

            }
        }

Ответ 4

Попробуйте этот код.

DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=TestOU,DC=TestDomain,DC=local");

for (int i = 0; i < 10; i++)
{
    try
    {
        DirectoryEntry childEntry = ouEntry.Children.Add("CN=TestUser" + i,  "user");
        childEntry.CommitChanges();
        ouEntry.CommitChanges();
        childEntry.Invoke("SetPassword", new object[] { "password" });
        childEntry.CommitChanges();
    }
    catch (Exception ex)
    {

    }
}