//Check user exist in a group public static bool IfUserExistInGroup(string username, string groupname) { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME"); // find a user UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username); // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupname); // check if user is member of that group if (user.IsMemberOf(group)) { return true; } else return false; } //Check if group exist public static bool ifGroupExist(string groupname) { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "domain", "admin", "Password"); GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, groupname); if (grp != null) { grp.Dispose(); ctx.Dispose(); return true; } else { ctx.Dispose(); return false; } } //if user exist public static bool ifUserExist(string username) { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "domain", "admin", "password"); UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username); if (usr != null) { usr.Dispose(); ctx.Dispose(); return true; } else { ctx.Dispose(); return false; } } //Find if user is administrator public static bool IsAdministrator() { WindowsIdentity identity = WindowsIdentity.GetCurrent(); if (null != identity) { WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } return false; } //set home directory public static string setHomeDir(string username, string homeDir) { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "", " ", " "); UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username); if (usr != null) { if (usr.Enabled == false) usr.Enabled = true; usr.HomeDirectory = homeDir; try { usr.Save(); } catch (Exception e) { return e.ToString(); } usr.Dispose(); } else { return "cant find user"; } ctx.Dispose(); return ("succssful"); } //Create user public static void createUser(string username, string password, string firstname, string surname, string yearlevel, string homegroup) { if (ifUserExist(username)) writeToLogs("user:" + username + " already exist", ADUserlogs); else { PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DomainName", "AdminName", " "); UserPrincipal up = new UserPrincipal(pc); up.SamAccountName = username; up.HomeDirectory = "\\\\FileServer$\\" + username; if (!Directory.Exists(up.HomeDirectory)) { Directory.CreateDirectory(up.HomeDirectory); AddDirectorySecurity(up.HomeDirectory, username, FileSystemRights.FullControl); } up.EmailAddress = username + "@Email.com"; up.SetPassword(password); up.Enabled = true; up.ExpirePasswordNow(); up.GivenName = firstname; up.Surname = surname; up.DisplayName = firstname + " " + firstname; up.HomeDrive = "U:"; up.Description = "Year " + yearlevel + " 2014"; try { up.Save(); up.Dispose(); pc.Dispose(); } catch (Exception E) { Console.WriteLine(E.ToString()); up.Dispose(); pc.Dispose(); } writeToLogs("user:" + username + "at yearlevel:" + yearlevel + "successfully created with password:" + password, ADUserlogs); string studentOU; if (homegroup != "condition1") studentOU = "OU1" else studentOU = " "; moveOU(getDN(username), studentOU); } } // create ou public static void createou(string ou, string rootou) { string rootOU = rootou; DirectoryEntry objAD = new DirectoryEntry(rootOU, " i", " "); DirectoryEntry objOU = objAD.Children.Add(ou, "OrganizationalUnit"); objOU.CommitChanges(); } //Change group scope public static void changeGroupScope(string s, GroupScope gp) { try { PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, s); group.GroupScope = gp; group.Save(); } catch (Exception E) { writeToLogs(E.ToString() + " --- when try to make changes on group name: " + s, ADGrouplogs); } } //Remove Directory Security public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType) { // Create a new DirectoryInfo object. DirectoryInfo dInfo = new DirectoryInfo(FileName); // Get a DirectorySecurity object that represents the // current security settings. DirectorySecurity dSecurity = dInfo.GetAccessControl(); // Add the FileSystemAccessRule to the security settings. dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account, Rights, ControlType)); // Set the new access settings. dInfo.SetAccessControl(dSecurity); } //Add AD security public static bool AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights) { try { // Create a new DirectoryInfo object. DirectoryInfo dInfo = new DirectoryInfo(FileName); // Get a DirectorySecurity object that represents the // current security settings. DirectorySecurity dSecurity = dInfo.GetAccessControl(); // Add the FileSystemAccessRule to the security settings. dSecurity.ResetAccessRule(new FileSystemAccessRule(Account, Rights, AccessControlType.Allow)); dSecurity.AddAccessRule(new FileSystemAccessRule(Account, Rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); /* dSecurity.AddAccessRule(new FileSystemAccessRule(Account, Rights, ControlType)); */ // Set the new access settings. dInfo.SetAccessControl(dSecurity); return true; } catch (Exception E) { return false; } } // move OU public static string moveOU(string userDN, string ou) { try { DirectoryEntry NewUser = new DirectoryEntry("LDAP://" + userDN); // Use the MoveTo property to define the new container you want to move the object to. NewUser.MoveTo(new DirectoryEntry("LDAP://" + ou)); } catch (Exception e) { writeToLogs("when move :" + userDN + " to " + ou + " , this happened" + e.ToString(), ADOUlogs); } return ("success"); } //get Distinguish Name public static string getDN(string username) { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, " ", " ", "Password"); UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username); if (usr != null) { string temp = usr.DistinguishedName.ToString(); usr.Dispose(); ctx.Dispose(); return temp; } else { ctx.Dispose(); return "cant find user"; } } //add user to a group public static string AddUserToGroup(string userId, string groupName) { if (ifUserExist(userId)) { if (!IfUserExistInGroup(userId, groupName)) { try { PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupName); UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userId); group.Members.Add(user); group.Save(); group.Dispose(); user.Dispose(); ctx.Dispose(); } catch (System.DirectoryServices.AccountManagement.PrincipalExistsException) { return userId + " is already a member of " + groupName; } catch (System.DirectoryServices.DirectoryServicesCOMException E) { return E.Message.ToString() + "WHen try to add: " + userId + " to group:" + groupName; } return userId + " is successfully added to " + groupName; } else return userId + " is already a member of " + groupName; } else return userId + " is not exist"; } //empty active directory group public static string emptyGroup(string groupname) { string output = "Empty Group started"; PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupname); // if found.... if (group != null) { // iterate over members foreach (Principal p in group.GetMembers()) { UserPrincipal theUser = p as UserPrincipal; if (theUser != null) { group.Members.Remove(theUser); try { group.Save(); } catch (Exception e) { output = e.ToString(); } finally { } } } } return output; } //create active directory group public static string createGroup(string Path, string name) { if (!DirectoryEntry.Exists(Path)) { try { DirectoryEntry entry = new DirectoryEntry(Path); DirectoryEntry group = entry.Children.Add("CN=" + name, "group"); group.Properties["sAmAccountName"].Value = name; group.CommitChanges(); return "group: " + name + " has been created "; } catch (Exception e) { return e.Message.ToString(); } } else { return emptyGroup(name); } }
Sunday, 30 November 2014
C# Active Directory fuctions
Labels:
Coding,
CSharp,
Programming
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment