using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.DirectoryServices.AccountManagement;
namespace ActiveDirectory_User
{
class Program
{
public class User
{
public string Firstname;
public string Lastname;
public string LoginId;
public string Office;
public string EmailAddress;
public bool IsDisabled;
public User()
{}
public User(string firstName, string lastName)
{
Firstname = firstName;
Lastname = lastName;
}
public User(string firstName, string lastName, string office = "London",)
{
Firstname = firstName;
Lastname = lastName;
Office = office;
}
}
static void Main(string[] args)
{
}
public static void CreateOU(string ou)
{
try
{
if (!DirectoryEntry.Exists("LDAP://PLABDC01/ou=" + ou + ",dc=PRACTICELABS,dc=COM"))
{
try
{
DirectoryEntry ActiveDirectory = new DirectoryEntry("LDAP://PLABDC01/dc=PRACTICELABS,dc=COM", "Administrator", "Passw0rd");
DirectoryEntry NewOU = ActiveDirectory.Children.Add("OU=" + ou, "OrganizationalUnit");
NewOU.CommitChanges();
ActiveDirectory.CommitChanges();
Console.WriteLine("Created OU:{0}", ou);
}
catch (Exception error)
{
Console.WriteLine("An error occured while creating group:{0} :\n{1}", ou, error.Message);
}
}
else
{
Console.WriteLine("OU already exists");
}
}
catch (Exception error)
{
Console.WriteLine("We couldnt connect to AD! Is the server powered on?. Exception generated was\n{0}", error.Message);
}
}
public bool CreateAccount()
{
// wrap our connection in a try catch block which will safeguard us against application crash if for example we can't connect to AD
try
{
string FullPath = "LDAP://PLABDC01/ou=" + Department + ",dc=PRACTICELABS,dc=COM";
// Active directory connection
DirectoryEntry Directory = new DirectoryEntry(FullPath, "Administrator", "Passw0rd");
// New user
DirectoryEntry NewUser = Directory.Children.Add("CN=" + LoginId, "user");
// givenName is first name
NewUser.Properties["givenName"].Value = Firstname;
// sn is last name
NewUser.Properties["sn"].Value = Lastname;
// login id
NewUser.Properties["sAMAccountName"].Value = LoginId;
// office
NewUser.Properties["physicalDeliveryOfficeName"].Value = Office;
// commit the new user
NewUser.CommitChanges();
// update the user to be enabled, here we CAST the value as an integer (i.e. we instruct the compiler that the return type value will be an int.
// casting this will cause exceptions if the return type is not what you specify so beware!
int val = (int)NewUser.Properties["userAccountControl"].Value;
NewUser.Properties["userAccountControl"].Value = val & ~0x2;
NewUser.CommitChanges();
// everything worked ok, return a value of true
return true;
}
catch (Exception error)
{
// an error occured, write the error message out and return a value of false
Console.Write("An error occured while creating user:{0} {1}: \n{2}", Firstname, Lastname, error.Message);
return false;
}
}
public bool DisableAccount()
{
try
{
DirectoryEntry Directory = new DirectoryEntry("LDAP://dc=PRACTICELABS,dc=COM");
DirectorySearcher SearchAD = new DirectorySearcher(Directory);
SearchAD.Filter = "(SAMAccountName=" + LoginId + ")";
SearchAD.CacheResults = false;
SearchResult result = SearchAD.FindOne();
Directory = result.GetDirectoryEntry();
Directory.Properties["userAccountControl"].Value = 0x0002;
Directory.CommitChanges();
return true;
}
catch (Exception error)
{
Console.WriteLine("An error occured when disabling this user:{0}\n{1}", LoginId, error.Message);
return false;
}
}//
}
}