[Автор : qDude]

В данном примере показано как создать пользователя в 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]