Friday, February 13, 2009

Programmatically add users to Active Drirectory

string strUserID = "user123";
string Fullname = "User1";
string password = "pass";
string office = "B" + strUserID;

try
{
DirectoryEntry objEntry = new DirectoryEntry();
objEntry.Path = "LDAP://AAA.com/DC=AAA,DC=com";
objEntry.Username = "AAA\\misadmin";
objEntry.Password = "mis";


DirectorySearcher userSearch = new DirectorySearcher();
userSearch.SearchRoot = objEntry;
userSearch.Filter = "(&(objectClass=user)(CN=" + strUserID + "))";
SearchResultCollection uColl = userSearch.FindAll();
if (uColl.Count == 0)
{
objEntry.Path = "LDAP://AAA.com/OU=MUsers,DC=AAA,DC=com";

//Add new user Account
DirectoryEntries users = objEntry.Children;
DirectoryEntry user = users.Add("CN=" + strUserID, "User");

//Set user properties

user.Properties["sAMAccountName"].Add(strUserID);
//Logon Name
user.Properties["userPrincipalName"].Add(strUserID + "@AAA.com");
//First Name
user.Properties["givenName"].Add(Fullname);
//Display Name
user.Properties["displayName"].Add(Fullname);
//Office
user.Properties["physicalDeliveryOfficeName"].Add(office);
user.CommitChanges();

//Set Password
object objRet = user.Invoke("SetPassword", password);
user.CommitChanges();

//Password never expires
int exp = (int)user.Properties["userAccountControl"].Value;
user.Properties["userAccountControl"].Value = exp | 0x1;
user.CommitChanges();

//Enable user account
int val = (int)user.Properties["userAccountControl"].Value;
user.Properties["userAccountControl"].Value = val & ~0x2;
user.CommitChanges();

user.Close();
objEntry.Close();

Response.Write(strUserID +" ----- User successfully added to domain");
}
else
{
Response.Write("User already exists");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}