Создание пользователя 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, просто установите начальный пароль (я также разрешаю сброс пароля пользователя, но те, которые выполняются в контексте этого конкретного пользователя), я надеюсь, что у кого-то умный решение, которое не требует от меня этого.
Спасибо заранее!
Ответы
Ответ 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)
{
}
}