Share via


Main classes associated with Active Directory using C#

Introduction

The classes associated with the DirectoryEntry component can be used with any of the Active Directory Domain Services service providers. Some of the current providers are Internet Information Services (IIS), Lightweight Directory Access Protocol (LDAP), Novell NetWare Directory Service (NDS), and WinNT.

Justifying

You can use a DirectoryEntry or DirectorySearcher component instance when you want to interact with the contents of an Active Directory hierarchy in your application. I created some classes that can interact with the contents of an Active Directory hierarchy.

Entities



      public class  Administrator
                  {      
                      public string  LogonName { get; set; }  
                      public string  Password { get; set; }  
                  }      



      public class  User
                   {      
                       public string  FirstName { get; set; }  
                       public string  LastName { get; set; }  
                       public string  FullName { get; set; }  
                       public string  LogonName { get; set; }  
                       public string  Password { get; set; }  
                       public string  NewPassword { get; set; }  
                   }      
public class  General
    {
        public string  FirstName { get; set; }
        public string  LastName { get; set; }
        public string  Description { get; set; }
        public string  Office { get; set; }
        public string  TelephoneNumber { get; set; }
        public string  Email { get; set; }
        public string  WebPage { get; set; }
        public string  LogonName { get; set; }
        public string  DisplayName { get; set; }
        public string  Initials { get; set; }
    }



      public class  Address
                    {      
                        public string  Street { get; set; }  
                        public string  Pobox { get; set; }  
                        public string  City { get; set; }  
                        public string  StateProvince { get; set; }  
                        public string  ZipPostalCode { get; set; }  
                        public string  CountryRegionCode { get; set; }  
                        public string  LogonName { get; set; }  
              
                    }      



      public class  Telephones
                   {      
                       public string  Home { get; set; }  
                       public string  Pager { get; set; }  
                       public string  Mobile { get; set; }  
                       public string  Fax { get; set; }  
                       public string  IpPhone {get; set;}  
                       public string  Notes { get; set; }  
                       public string  LogonName { get; set; }  
                   }      
public class  Organization
  {
      public string  JobTitle { get; set; }
      public string  Department { get; set; }
      public string  Company { get; set; }
      public string  Manager { get; set; }
      public string  LogonName { get; set; }
  }



      public class  MemberOf
                   {      
                       public string  Name { get; set; }  
                       public string  logonName { get; set; }  
                   }      

Main Methods

public class  ActiveDirectoryResources
    {
        Controller.Controller control = new  Controller.Controller();
 
    public string  ChangePassword(string logonName, string password, string newPassord)
        {
            User user = new  User();
            user.LogonName = logonName;
            user.Password = password;
            user.NewPassword = newPassord;
            return control.ChangePassword(user);
              
        }
 
    public string  CreateUserAccount(string password, string firstName, string lastName, string userLogon, string logonAdmin, string passwordAdmin)
        {
            User user = new  User();
            Administrator admin = new  Administrator();
   
            user.LogonName = userLogon;
            user.FirstName = firstName;
            user.LastName = lastName;
            user.Password = password;
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
   
            return control.CreateUserAccount(user,admin);
        }
 
    public string  AddUserToOU(string  logonName, string  OU, string  logonAdmin, string  passwordAdmin)
        {
            User user = new  User();
            Administrator admin = new  Administrator();
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            user.LogonName = logonName;
            return control.AddUserToOU(user, admin, OU);
        }
 
    public string  AddUserToGroup(string logonName, string group, string logonAdmin, string passwordAdmin)
        {
            MemberOf member = new  MemberOf();
            Administrator admin = new  Administrator();
            member.logonName = logonName;
            member.Name = group;
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            return control.AddUserToGroup(member,admin);
              
        }
 
    public string  RemoveUserFromGroup(string logonName, string group, string logonAdmin, string passwordAdmin)
        {
            MemberOf member = new  MemberOf();
            Administrator admin = new  Administrator();
            member.logonName = logonName;
            member.Name = group;
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            return control.RemoveUserFromGroup(member,admin);
              
        }
 
    public string  GetUserGroupMembership(string logonName)
        {
            User user = new  User();
            user.LogonName = logonName;
            return control.GetUserGroupMembership(user);
        }
 
 
    public string  UpdateUserGeneral(string logonName, string firstName, string lastName, string description, string office, string email, string telephoneNumber ,string webPage, string logonAdmin, string passwordAdmin)
        {
           General user = new  General();
           Administrator admin = new  Administrator();
           admin.LogonName = logonAdmin;
           admin.Password = passwordAdmin;
              
           user.LogonName = logonName;
           user.FirstName = firstName;
           user.LastName = lastName;
           user.DisplayName = firstName + " " + lastName;
           user.Description = description;
           user.Email = email;
           user.TelephoneNumber = telephoneNumber;
           user.WebPage = webPage;
           user.Office = office;
           user.Initials = firstName.Substring(0,1) + lastName.Substring(0,1);
  
           return control.UpdateUserGeneral(user, admin);
       }
 
    ///<param name="countryRegionCode">
        ///     Field Country Region Code - Address
        ///     code="AQ" case "Antarctica
        ///     code="AG" case "Antigua and Barbuda
        ///     code="AR" case "Argentina
        ///     code="AM" case "Armenia
        ///     code="AW" case "Aruba
        ///     code="AU" case "Australia
        ///     code="AT" case "Austria
        ///     code="AZ" case "Azerbaijan
        ///     code="BS" case "Bahamas
        ///     code="BH" case "Bahrain
        ///     code="BD" case "Bangladesh
        ///     code="BB" case "Barbados
        ///     code="BY" case "Belarus
        ///     code="BE" case "Belgium
        ///     code="BZ" case "Belize
        ///     code="BJ" case "Benin
        ///     code="BM" case "Bermuda
        ///     code="BT" case "Bhutan
        ///     code="BO" case "Bolivia
        ///     code="BA" case "Bosnia and Herzegovina
        ///     code="BW" case "Botswana
        ///     code="BV" case "Bouvet Island
        ///     code="BR" case "Brazil
        ///     code="IO" case "British Indian Ocean Territory
        ///     code="BN" case "Brunei Darussalam
        ///     code="BG" case "Bulgaria
        ///     code="BF" case "Burkina Faso
        ///     code="BI" case "Burundi
        ///     code="KH" case "Cambodia
        ///     code="CM" case "Cameroon
        ///     code="CA" case "Canada
        ///     code="CV" case "Cape Verde
        ///     code="KY" case "Cayman Islands
        ///     code="CF" case "Central African Republic
        ///     code="TD" case "Chad
        ///     code="CL" case "Chile
        ///     code="CN" case "China
        ///     code="CX" case "Christmas Island
        ///     code="CC" case "Cocos (Keeling) Islands
        ///     code="CO" case "Colombia
        ///     code="KM" case "Comoros
        ///     code="CG" case "Congo
        ///     code="CD" case "Congo, The Democratic Republic of the
        ///     code="CK" case "Cook Islands
        ///     code="CR" case "Costa Rica
        ///     code="HR" case "Croatia
        ///     code="CY" case "Cyprus
        ///     code="CZ" case "Czech Republic
        ///     code="CI" case "Côte d'Ivoire
        ///     code="DK" case "Denmark
        ///     code="DJ" case "Djibouti
        ///     code="DM" case "Dominica
        ///     code="DO" case "Dominican Republic
        ///     code="EC" case "Ecuador
        ///     code="EG" case "Egypt
        ///     code="SV" case "El Salvador
        ///     code="GQ" case "Equatorial Guinea
        ///     code="ER" case "Eritrea
        ///     code="EE" case "Estonia
        ///     code="ET" case "Ethiopia
        ///     code="FK" case "Falkland Islands (Malvinas)
        ///     code="FO" case "Faroe Islands
        ///     code="FJ" case "Fiji
        ///     code="FI" case "Finland
        ///     code="FR" case "France
        ///     code="GF" case "French Guiana
        ///     code="PF" case "French Polynesia
        ///     code="TF" case "French Southern Territories
        ///     code="GA" case "Gabon
        ///     code="GM" case "Gambia
        ///     code="GE" case "Georgia
        ///     code="DE" case "Germany
        ///     code="GH" case "Ghana
        ///     code="GI" case "Gibraltar
        ///     code="GR" case "Greece
        ///     code="GL" case "Greenland
        ///     code="GD" case "Grenada
        ///     code="GP" case "Guadeloupe
        ///     code="GU" case "Guam
        ///     code="GT" case "Guatemala
        ///     code="GG" case "Guernsey
        ///     code="GN" case "Guinea
        ///     code="GW" case "Guinea-Bissau
        ///     code="GY" case "Guyana
        ///     code="HT" case "Haiti
        ///     code="HM" case "Heard Island and McDonald Islands
        ///     code="VA" case "Holy See (Vatican City State)
        ///     code="HN" case "Honduras
        ///     code="HK" case "Hong Kong
        ///     code="HU" case "Hungary
        ///     code="IS" case "Iceland
        ///     code="IN" case "India
        ///     code="ID" case "Indonesia
        ///     code="IQ" case "Iraq
        ///     code="IE" case "Ireland
        ///     code="IM" case "Isle of Man
        ///     code="IL" case "Israel
        ///     code="IT" case "Italy
        ///     code="JM" case "Jamaica
        ///     code="JP" case "Japan
        ///     code="JE" case "Jersey
        ///     code="JO" case "Jordan
        ///     code="KZ" case "Kazakhstan
        ///     code="KE" case "Kenya
        ///     code="KI" case "Kiribati
        ///     code="KR" case "Korea, Republic of
        ///     code="KW" case "Kuwait
        ///     code="KG" case "Kyrgyzstan
        ///     code="LA" case "Lao People's Democratic Republic
        ///     code="LV" case "Latvia
        ///     code="LB" case "Lebanon
        ///     code="LS" case "Lesotho
        ///     code="LR" case "Liberia
        ///     code="LY" case "Libyan Arab Jamahiriya
        ///     code="LI" case "Liechtenstein
        ///     code="LT" case "Lithuania
        ///     code="LU" case "Luxembourg
        ///     code="MO" case "Macao
        ///     code="MK" case "Macedonia, The former Yugoslav Republic of
        ///     code="MG" case "Madagascar
        ///     code="MW" case "Malawi
        ///     code="MY" case "Malaysia
        ///     code="MV" case "Maldives
        ///     code="ML" case "Mali
        ///     code="MT" case "Malta
        ///     code="MH" case "Marshall Islands
        ///     code="MQ" case "Martinique
        ///     code="MR" case "Mauritania
        ///     code="MU" case "Mauritius
        ///     code="YT" case "Mayotte
        ///     code="MX" case "Mexico
        ///     code="FM" case "Micronesia, Federated States of
        ///     code="MD" case "Moldova, Republic of
        ///     code="MC" case "Monaco
        ///     code="MN" case "Mongolia
        ///     code="ME" case "Montenegro
        ///     code="MS" case "Montserrat
        ///     code="MA" case "Morocco
        ///     code="MZ" case "Mozambique
        ///     code="MM" case "Myanmar
        ///     code="NA" case "Namibia
        ///     code="NR" case "Nauru
        ///     code="NP" case "Nepal
        ///     code="NL" case "Netherlands
        ///     code="AN" case "Netherlands Antilles
        ///     code="NC" case "New Caledonia
        ///     code="NZ" case "New Zealand
        ///     code="NI" case "Nicaragua
        ///     code="NE" case "Niger
        ///     code="NG" case "Nigeria
        ///     code="NU" case "Niue
        ///     code="NF" case "Norfolk Island
        ///     code="MP" case "Northern Mariana Islands
        ///     code="NO" case "Norway
        ///     code="OM" case "Oman
        ///     code="PK" case "Pakistan
        ///     code="PW" case "Palau
        ///     code="PS" case "Palestinian Territory
        ///     code="PA" case "Panama
        ///     code="PG" case "Papua New Guinea
        ///     code="PY" case "Paraguay
        ///     code="PE" case "Peru
        ///     code="PH" case "Philippines
        ///     code="PN" case "Pitcairn
        ///     code="PL" case "Poland
        ///     code="PT" case "Portugal
        ///     code="PR" case "Puerto Rico
        ///     code="QA" case "Qatar
        ///     code="RO" case "Romania
        ///     code="RU" case "Russian Federation
        ///     code="RW" case "Rwanda
        ///     code="RE" case "Réunion
        ///     code="BL" case "Saint Barthélemy
        ///     code="SH" case "Saint Helena
        ///     code="KN" case "Saint Kitts and Nevis
        ///     code="LC" case "Saint Lucia
        ///     code="MF" case "Saint Martin
        ///     code="PM" case "Saint Pierre and Miquelon
        ///     code="VC" case "Saint Vincent and the Grenadines
        ///     code="WS" case "Samoa
        ///     code="SM" case "San Marino
        ///     code="SA" case "Saudi Arabia
        ///     code="SN" case "Senegal
        ///     code="RS" case "Serbia
        ///     code="SC" case "Seychelles
        ///     code="SL" case "Sierra Leone
        ///     code="SG" case "Singapore
        ///     code="SK" case "Slovakia
        ///     code="SI" case "Slovenia
        ///     code="SB" case "Solomon Islands
        ///     code="SO" case "Somalia
        ///     code="ZA" case "South Africa
        ///     code="GS" case "South Georgia and the South Sandwich Islands
        ///     code="ES" case "Spain
        ///     code="LK" case "Sri Lanka
        ///     code="SR" case "Suriname
        ///     code="SJ" case "Svalbard and Jan Mayen
        ///     code="SZ" case "Swaziland
        ///     code="SE" case "Sweden
        ///     code="CH" case "Switzerland
        ///     code="ST" case "São Tome and Principe
        ///     code="TW" case "Taiwan
        ///     code="TJ" case "Tajikistan
        ///     code="TZ" case "Tanzania, United Republic of
        ///     code="TH" case "Thailand
        ///     code="TL" case "Timor-Leste
        ///     code="TG" case "Togo
        ///     code="TK" case "Tokelau
        ///     code="TO" case "Tonga
        ///     code="TT" case "Trinidad and Tobago
        ///     code="TN" case "Tunisia
        ///     code="TR" case "Turkey
        ///     code="TM" case "Turkmenistan
        ///     code="TC" case "Turks and Caicos Islands
        ///     code="TV" case "Tuvalu
        ///     code="UG" case "Uganda
        ///     code="UA" case "Ukraine
        ///     code="AE" case "United Arab Emirates
        ///     code="GB" case "United Kingdom
        ///     code="US" case "United States
        ///     code="UM" case "United States Minor Outlying Islands
        ///     code="UY" case "Uruguay code="UZ" case "Uzbekistan
        ///     code="VU" case "Vanuatu
        ///     code="VE" case "Venezuela
        ///     code="VN" case "Viet Nam
        ///     code="VG" case "Virgin Islands, British
        ///     code="VI" case "Virgin Islands, U.S.
        ///     code="WF" case "Wallis and Futuna
        ///     code="EH" case "Western Sahara
        ///     code="YE" case "Yemen
        ///     code="ZM" case "Zambia
        ///     code="ZW" case "Zimbabwe
        /// </param>
 
 
    public string  UpdateUserAddress(string logonName, string street, string poBox,string city, string stateProvince,string zipPostalCode, string countryRegionCode,string logonAdmin, string passwordAdmin)
        {
            Address user = new  Address();
            Administrator admin = new  Administrator();
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            user.LogonName = logonName;
            user.Street = street;
            user.Pobox = poBox;
            user.City = city;
            user.StateProvince = stateProvince;
            user.ZipPostalCode = zipPostalCode;
            user.CountryRegionCode = countryRegionCode;
   
            return control.UpdateUserAddress(user, admin);
        }
 
 
    public string  UpdateUserTelephones(string logonName, string home, string pager, string mobile, string fax, string ipPhone, string notes, string logonAdmin, string passwordAdmin)
        {
            Telephones user = new  Telephones();
            Administrator admin = new  Administrator();
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            user.LogonName = logonName;
            user.Home= home;
            user.Pager = pager;
            user.Mobile = mobile;
            user.Fax = fax;
            user.IpPhone = ipPhone;
            user.Notes = notes;
   
            return control.UpdateUserTelephones(user, admin);
   
        }
 
 
    public string  UpdateUserOrganization(string logonName, string jobTitle, string department, string company, string logonManager, string logonAdmin, string passwordAdmin)
        {
           Organization user = new  Organization();
           Administrator admin = new  Administrator();
           admin.LogonName = logonAdmin;
           admin.Password = passwordAdmin;
           user.LogonName = logonName;
           user.JobTitle = jobTitle;
           user.Department = department;
           user.Company = company;
           user.Manager = logonManager;
  
           return control.UpdateUserOrganization(user, admin);
  
       }
 
    public string  EnabledUserAccount(string logonName, string logonAdmin, string passwordAdmin, bool enabled)
        {
            Administrator admin = new  Administrator();
            User user = new  User();
            admin.LogonName = logonAdmin;
            admin.Password = passwordAdmin;
            user.LogonName = logonName;
   
            return control.EnabledUserAccount(user, admin, enabled);
        }
}

Main Class

public class  Controller
  {
   
      string domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName.ToString();
 
    public string  GetUserGroupMembership(User user)
        {
   
          ArrayList arrGroup = new  ArrayList();
   
          try
          {
              if (!Equals(domain, ""))
              {
                  DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain);
                  DirectorySearcher search = new  DirectorySearcher(entry, "(sAMAccountName=" + user.LogonName + ")");
                  SearchResult results = search.FindOne();
                  if (results != null)
                  {
                      DirectoryEntry obUser = new  DirectoryEntry(results.Path);
                      object obGroups = obUser.Invoke("Groups");
                      foreach (object ob in (IEnumerable)obGroups)
                      {
                          DirectoryEntry obGpEntry = new  DirectoryEntry(ob);
                          arrGroup.Add(obGpEntry.Name);
                      }
                      entry.Close();
                      return string.Join(",", (string[])arrGroup.ToArray(Type.GetType("System.String")));
                  }
                  else
                  {
                      return "User not found.";
                  }
              }
              else
              {
                  return "Domain not found.";
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
      }
 
    public string  AddUserToOU(User user, Administrator admin, string OU)
        {
          try
          {
              if (!Equals(user.LogonName, "") && !Equals(OU, "") && !Equals(admin.LogonName, "") && !Equals(admin.Password, ""))
              {
                  if (!Equals(domain, ""))
                  {
   
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher search = new  DirectorySearcher(entry);
                      search.Filter = "(&(objectCategory=organizationalUnit)(OU=" + OU + "))";
                      search.SearchRoot = entry;
                      SearchResult result1 = search.FindOne();
                      bool bResult = false;
                      string message = "";
   
                      if (result1 != null)
                      {
                          DirectoryEntry entyUser = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                          DirectorySearcher deSearch = new  DirectorySearcher(entry);
                          deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                          deSearch.SearchScope = SearchScope.Subtree;
                          SearchResult result2 = deSearch.FindOne();
   
                          if (result2 != null)
                          {
                              entyUser = result2.GetDirectoryEntry();
                              entry = result1.GetDirectoryEntry();
                              entyUser.MoveTo(entry);
                              entyUser.CommitChanges();
                              entyUser.Close();
                              entyUser.Dispose();
                              bResult = true;
                          }
                          else
                          {
                              bResult = false;
                              message = "User not found.";
                          }
                      }
                      else
                      {
                          bResult = false;
                          message = "Organization Unit not found.";
                      }
   
                      search.Dispose();
                      entry.Close();
                      entry.Dispose();
   
                      if (bResult)
                      {
                          return "ok";
                            
                      }
                      else
                      {
                          return message;
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform the user logon.";
                  }
                  else if  (Equals(OU, ""))
                  {
                      return "Please inform the Organization Unit(OU).";
   
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform the administrator logon.";
                  }
                  else
                  {
                      return "Please inform the administrator password";
                  }
              }
          }
          catch (Exception ex)
          {
              return "Error: " + ex.InnerException.Message.ToString();
          }
      }
 
    public string  AddUserToGroup(MemberOf member,Administrator admin)
        {
          try
          {
              if (!Equals(member.Name, "") && !Equals(member.logonName, "") && !Equals(admin.Password, "") && !Equals(admin.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher search = new  DirectorySearcher(entry);
                      search.SearchRoot = entry;
                      search.Filter = "(&(objectCategory=group)(CN="  + member.Name + "))";
                      SearchResult result = search.FindOne();
                      bool bResult = false;
                      string message = "";
   
                      if (result != null)
                      {
   
                          DirectoryEntry entyUser = result.GetDirectoryEntry();
                          //search = new DirectorySearcher(entyUser);
                          search.Filter = "(&(objectCategory=user)(CN="  + member.logonName + "))";
                          result = search.FindOne();
   
                          if (result != null)
                          {
   
                              DirectoryEntry user = result.GetDirectoryEntry();
                              entyUser.Invoke("Add", new  Object[] { user.Path });
                              entyUser.CommitChanges();
                              entyUser.Close();
                              entyUser.Dispose();
                              user.Close();
                              user.Dispose();
                              bResult = true;
                          }
                          else
                          {
                              bResult = false;
                              message = "User not found.";
                          }
                      }
                      else
                      {
                          bResult = false;
                          message = "Group not found.";
                      }
   
                      search.Dispose();
                      entry.Close();
                      entry.Dispose();
   
                      if (bResult)
                      {
                          return "ok";
                            
                      }
                      else
                      {
                          return message;
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(member.Name,""))
                  {
                      return "Please inform the Group (MemberOf).";
                  }
                  else if  (Equals(member.logonName))
                  {
                      return "Please inform the user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform the administrator logon.";
                  }
                  else
                  {
                      return "Please inform administrator password";
                  }
              }
          }
          catch (Exception ex)
          {
              if (!Equals(ex.InnerException.Message.IndexOf("0x80071392"), -1))
              {
                  return "the user " + member.logonName + " has been added into group "  + member.Name + ".";
              }
              else
              {
                  return "Error: " + ex.InnerException.Message.ToString();
   
              }
                 
          }
      }
 
    public string  RemoveUserFromGroup(MemberOf member, Administrator admin)
        {
          try
          {
              if (!Equals(member.Name, "") && !Equals(member.logonName, "") && !Equals(admin.Password, "") && !Equals(admin.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher search = new  DirectorySearcher(entry);
                      search.SearchRoot = entry;
                      search.Filter = "(&(objectCategory=group)(CN="  + member.Name + "))";
                      SearchResult result = search.FindOne();
                      bool bResult = false;
                      string message = "";
   
                      if (result != null)
                      {
   
                          DirectoryEntry entyUser = result.GetDirectoryEntry();
                          //search = new DirectorySearcher(entyUser);
                          search.Filter = "(&(objectCategory=user)(CN="  + member.logonName + "))";
                          result = search.FindOne();
   
                          if (result != null)
                          {
   
                              DirectoryEntry user = result.GetDirectoryEntry();
   
                              entyUser.Invoke("Remove", new  Object[] { user.Path });
   
                              entyUser.CommitChanges();
                              entyUser.Close();
                              entyUser.Dispose();
                              user.Close();
                              user.Dispose();
                              bResult = true;
                          }
                          else
                          {
                              bResult = false;
                              message = "The user belong the group "  + member.Name + ".";
                          }
                      }
                      else
                      {
                          bResult = false;
                          message = "Group not found.";
                      }
   
                      search.Dispose();
                      entry.Close();
                      entry.Dispose();
   
                      if (bResult)
                      {
                          return "ok";
                            
                      }
                      else
                      {
                          return message;
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(member.Name, ""))
                  {
                      return "Please inform the group (MemberOf).";
                  }
                  else if  (Equals(member.logonName))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon.";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
              }
          }
          catch (Exception ex)
          {
              if (!Equals(ex.InnerException.Message.IndexOf("0x80072035"), -1))
              {
                  return "the user "+ member.logonName + " has been removed the group "+ member.Name +".";
              }
              else
              {
                  return "Error: " + ex.InnerException.Message.ToString();
   
              }
          }
        }
 
    public string  EnabledUserAccount(User user,Administrator admin, bool enabled)
        {
          try
          {
              if (!Equals(admin.LogonName, "") && !Equals(admin.Password, "") && !Equals(user.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher deSearch = new  DirectorySearcher(entry);
                      deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                      deSearch.SearchScope = SearchScope.Subtree;
                      SearchResult result = deSearch.FindOne();
   
                      if (result != null)
                      {
                          entry = new  DirectoryEntry();
                          entry = result.GetDirectoryEntry();
   
                          if (enabled)
                          {
                              entry.Properties["userAccountControl"].Value = 512;
                          }
                          else
                          {
                              entry.Properties["userAccountControl"].Value = 514;
                          }
   
                          entry.CommitChanges();
   
                          entry.Close();
                          entry.Dispose();
                          return "ok";
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform Administrator logon";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
              }
   
          }
          catch(Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  UpdateUserOrganization(Organization user, Administrator admin)
        {
          try
          {
              if (!Equals(admin.LogonName, "") && !Equals(admin.Password, "") && !Equals(user.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher deSearch = new  DirectorySearcher(entry);
                      deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                      deSearch.SearchScope = SearchScope.Subtree;
                      SearchResult result = deSearch.FindOne();
   
                      if (result != null)
                      {
   
                          if (!Equals(user.Manager, ""))
                          {
   
                              deSearch = new  DirectorySearcher(entry);
                              deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.Manager + "))";
                              deSearch.SearchScope = SearchScope.Subtree;
                              SearchResult result2 = deSearch.FindOne();
                              if (Equals(result2, null))
                              {
                                  entry.Close();
                                  entry.Dispose();
                                  return "Manage Login (" + user.Manager + ") not found.";
                              }
                              else
                              {
                                  DirectoryEntry entryManager = new  DirectoryEntry();
                                  entryManager = result2.GetDirectoryEntry();
                                  user.Manager = entryManager.Properties["distinguishedName"].Value.ToString();
                              }
                          }
                             
                          entry = new  DirectoryEntry();
                          entry = result.GetDirectoryEntry();
                          entry.Properties["title"].Value = user.JobTitle;
                          entry.Properties["department"].Value = user.Department;
                          entry.Properties["company"].Value = user.Company;
   
                          if (!Equals(user.Manager, ""))
                          {
                              entry.Properties["manager"].Value = user.Manager;
                          }
   
                          entry.CommitChanges();
                          entry.Close();
                          entry.Dispose();
                          return "ok";
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon";
                  }
                  else
                  {
                      return "Please inform administrator password";
                  }
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  UpdateUserTelephones(Telephones user, Administrator admin)
        {
          try
          {
              if (!Equals(admin.LogonName, "") && !Equals(admin.Password, "") && !Equals(user.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                       DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher deSearch = new  DirectorySearcher(entry);
                      deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                      deSearch.SearchScope = SearchScope.Subtree;
                      SearchResult result = deSearch.FindOne();
   
                      if (result != null)
                      {
                          entry = new  DirectoryEntry();
                          entry = result.GetDirectoryEntry();
                          entry.Properties["homePhone"].Value = user.Home;
                          entry.Properties["pager"].Value = user.Pager;
                          entry.Properties["mobile"].Value=user.Mobile;
                          entry.Properties["facsimileTelephoneNumber"].Value = user.Fax;
                          entry.Properties["ipPhone"].Value = user.IpPhone;
                          entry.Properties["info"].Value = user.Notes;
                          entry.CommitChanges();
                          entry.Close();
                          entry.Dispose();
                          return "ok";
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon.";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  UpdateUserAddress(Address user, Administrator admin)
        {
          try
          {
              if (!Equals(admin.LogonName, "") && !Equals(admin.Password, "") && !Equals(user.LogonName, ""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher deSearch = new  DirectorySearcher(entry);
                      deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                      deSearch.SearchScope = SearchScope.Subtree;
                      SearchResult result = deSearch.FindOne();
   
                      if (result != null)
                      {
                          entry = new  DirectoryEntry();
                          entry = result.GetDirectoryEntry();
                          entry.Properties["streetAddress"].Value = user.Street;
                          entry.Properties["postOfficeBox"].Value = user.Pobox;
                          entry.Properties["l"].Value = user.City;
                          entry.Properties["st"].Value = user.StateProvince;
                          entry.Properties["postalCode"].Value = user.ZipPostalCode;
                          entry.Properties["c"].Value = user.CountryRegionCode;
                          entry.CommitChanges();
                          entry.Close();
                          entry.Dispose();
                          return "ok";
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon.";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  UpdateUserGeneral(General user, Administrator admin)
        {
          try
          {
              if (!Equals(admin.LogonName, "") && !Equals(admin.Password, "") && !Equals(user.LogonName,""))
              {
                  if (!Equals(domain, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                      DirectorySearcher deSearch = new  DirectorySearcher(entry);
                      deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                      deSearch.SearchScope = SearchScope.Subtree;
                      SearchResult result = deSearch.FindOne();
   
                      if (result != null)
                      {
                          entry = new  DirectoryEntry();
                          entry = result.GetDirectoryEntry();
                          entry.Properties["givenname"].Value = user.FirstName;
                          entry.Properties["displayname"].Value = user.DisplayName;
                          entry.Properties["description"].Value = user.Description;
                          entry.Properties["physicalDeliveryOfficeName"].Value = user.Office;
                          entry.Properties["mail"].Value = user.Email;
                          entry.Properties["telephoneNumber"].Value = user.TelephoneNumber;
                          entry.Properties["wwwHomePage"].Value = user.WebPage;
                          entry.Properties["initials"].Value = user.Initials;
   
                          entry.CommitChanges();
                          entry.Close();
                          entry.Dispose();
                          return "ok";
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      return "Domain not found.";
                  }
              }
              else
              {
                  if (Equals(user.LogonName, ""))
                  {
                      return "Please inform user logon.";
                  }
                  else if  (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon.";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  CreateUserAccount(User user,Administrator admin)
        {
          try
          {
              if (!Equals(admin.Password, "") && !Equals(admin.LogonName, ""))
              {
   
                  if (!Equals(user.Password, "") && !Equals(user.FirstName, "") && !Equals(user.LogonName, ""))
                  {
                      if (!Equals(domain, ""))
                      {
   
                          DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                          DirectorySearcher deSearch = new  DirectorySearcher(entry);
                          deSearch.Filter = "(&(objectClass=user)(SAMAccountName="  + user.LogonName + "))";
                          deSearch.SearchScope = SearchScope.Subtree;
                          SearchResult result = deSearch.FindOne();
   
                          if (Equals(result, null))
                          {
   
                              string oGUID = string.Empty;
                              entry = new  DirectoryEntry("LDAP://"  + domain, admin.LogonName, admin.Password, AuthenticationTypes.Secure);
                              DirectoryEntry newUser = entry.Children.Add("CN=" + user.LogonName, "user");
                              newUser.Properties["samAccountName"].Value = user.LogonName;
                              newUser.Properties["givenname"].Add(user.FirstName);
                              newUser.Properties["displayname"].Add(user.FirstName + " " + user.LastName);
                              newUser.Properties["SN"].Add(user.LastName);
                              newUser.Properties["userPrincipalName"].Add(user.LogonName.ToLower() + "@" + domain);
                              newUser.CommitChanges();
   
                              newUser.Invoke("SetPassword", new  object[] { user.Password });
                              newUser.CommitChanges();
                              oGUID = newUser.Guid.ToString();
                              entry.Close();
                              newUser.Close();
   
                              if (Equals(oGUID, ""))
                              {
                                  return "The user wasn't created with success.";
                              }
                              else
                              {
                                    
                                  return "ok";
                              }
                          }
                          else
                          {
                              return "There is an user with login "  + user.LogonName;
                          }
                      }
                      else
                      {
                          return "Domain not found.";
                      }
                  }
                  else
                  {
                      if (Equals(user.Password, ""))
                      {
                          return "Please inform the user password.";
                      }
                      else if  (Equals(user.FirstName))
                      {
                          return "Please inform the user first name.";
                      }
                      else
                      {
                          return "Please inform user logon.";
                      }
                  }
              }
              else
              {
                  if (Equals(admin.LogonName, ""))
                  {
                      return "Please inform administrator logon";
                  }
                  else
                  {
                      return "Please inform administrator password.";
                  }
   
              }
          }
          catch (Exception ex)
          {
              return ex.InnerException.Message.ToString();
          }
        }
 
    public string  ChangePassword(User user)
        {
          try
          {
              if (!Equals(domain, ""))
              {
                  if (!Equals(user.LogonName, "") && !Equals(user.Password, "") && !Equals(user.NewPassword, ""))
                  {
                      DirectoryEntry entry = new  DirectoryEntry("LDAP://"  + domain, user.LogonName, user.Password, AuthenticationTypes.Secure);
                      DirectorySearcher search = new  DirectorySearcher(entry);
                      search.Filter = "(SAMAccountName="  + user.LogonName + ")";
                      search.SearchScope = SearchScope.Subtree;
                      search.CacheResults = false;
                      SearchResultCollection results = search.FindAll();
                      string resultMessage = "";
   
                      if (results.Count > 0)
                      {
                          foreach (SearchResult result in results)
                          {
                              try
                              {
                                  entry = new  DirectoryEntry();
                                  entry = result.GetDirectoryEntry();
                                  entry.Invoke("ChangePassword", new  object[] { user.Password, user.NewPassword });
                                  entry.CommitChanges();
                                  //resultMessage = "Password changed with success.";
                                  resultMessage = "ok";
                                  entry.Close();
                              }
                              catch (Exception ex)
                              {
                                  if (!Equals(ex.InnerException.Message.IndexOf("0x800708C5"), -1))
                                  {
                                      resultMessage = "Password can not be changed due to the server restrictions. Check the minimum size required for password complexity required and password history requirements.";
                                  }
                                  else
                                  {
                                      resultMessage = "Password can not be changed due to the server restrictions. " + ex.InnerException.Message.ToString() + "";
                                  }
                              }
                          }
                          return resultMessage;
                      }
                      else
                      {
                          return "User not found.";
                      }
                  }
                  else
                  {
                      if (Equals(user.LogonName, ""))
                      {
                          return "Please inform user name.";
                      }
                      else if  (Equals(user.Password, ""))
                      {
                          return "Please inform actual user password.";
                      }
                      else
                      {
                          return "Please inform new password.";
                      }
                  }
              }
              else
              {
                  return "Domain not found.";
              }
          }
          catch (Exception ex)
          {
              return "Error: " + ex.InnerException.Message.ToString();
          }
        }
}

Conclusion

I hope this helps out all those programmers that had spent hours looking for the System.DirectoryServices command trying to seek answers on how to do AD tasks.