В данном примере показано как создать пользователя в AD, назначить ему пароль, logonName и активировать полученную учетную запись. Также приведена функция, создающая/устанавливающая любое свойство объекта AD.
using System;
using System.DirectoryServices;
namespace DirectoryServicesSamples
{
class ADSamples
{
//Параметры создаваемой учетной записи
public enum ADAccountOptions
{
UF_TEMP_DUPLICATE_ACCOUNT = 0x0100,
UF_NORMAL_ACCOUNT =0x0200,
UF_INTERDOMAIN_TRUST_ACCOUNT =0x0800,
UF_WORKSTATION_TRUST_ACCOUNT = 0x1000,
UF_SERVER_TRUST_ACCOUNT =0x2000,
UF_DONT_EXPIRE_PASSWD=0x10000,
UF_SCRIPT =0x0001,
UF_ACCOUNTDISABLE=0x0002,
UF_HOMEDIR_REQUIRED =0x0008,
UF_LOCKOUT=0x0010,
UF_PASSWD_NOTREQD=0x0020,
UF_PASSWD_CANT_CHANGE=0x0040,
UF_ACCOUNT_LOCKOUT=0X0010,
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED=0X0080,
}
[STAThread]
static void Main(string[] args)
{
//Имя контроллера домена domain, DNS адрес домена domain.organization.com
//В случае, если добавляем пользователя в OrganizationalUnit AD, то вместо CN=Users пишем
//OU = Organizational Unit Name
AddUser("domain/CN=Users,DC=domain,DC=organization,DC=com",@"NewUser","AdminPassword");
Console.ReadLine();
}
public static void AddUser(string strDoamin, string strLogin, string strPwd)
{
try
{
DirectoryEntry obDirEntry = new DirectoryEntry("LDAP://" + strDoamin,@"domain\admin","AdminPWD");
DirectoryEntry obUser = obDirEntry.Children.Add("CN=" + strLogin, "user");
obDirEntry.Close();
//Пользователь еще не добавлен в AD. Для сохранения изменений используем метод CommitChanges();
obUser.CommitChanges();
//Устанавливаем пароль
obUser.Invoke("SetPassword", strPwd);
obUser.CommitChanges();
Console.WriteLine("Пароль установлен");
//Устанавливаем Logon Name
//Для NT
SetProperty(ref obUser, "samAccountName",strLogin);
//Начная с Windows 2000
obUser.Invoke("Put", new object[] {"userPrincipalName", strLogin + "@domain.organization.com"});
obUser.CommitChanges();
Console.WriteLine("Logon Name установлен");
//Активируем созданную учетную запись
obUser.Properties["userAccountControl"][0]=ADAccountOptions.UF_NORMAL_ACCOUNT;
obUser.CommitChanges();
Console.WriteLine("Учетная запись активирована");
//Устанавливаем необходимые параметры лдя созданного пользователя
SetProperty(ref obUser, "givenName","Best of The Tester");
obUser.Close();
}
catch (Exception ex)
{
Console.Write(ex.Message);
//Пишим Error Log
}
}
public static void SetProperty(ref DirectoryEntry obUser, string propertyName, string propertyValue)
{
//Если заданное поле существует, то
if(obUser.Properties.Contains(propertyName))
{
//изменяем его значение
obUser.Properties[propertyName][0]=propertyValue;
}
else
{
//добавляем данное поле
obUser.Properties[propertyName].Add(propertyValue);
}
obUser.CommitChanges();
Console.WriteLine(string.Format("Параметр '{0}' установлен",propertyName));
}
}
}[Автор : qDude]