利用C#怎么编写一个Windows组和用户管理功能系统-创新互联
本篇文章给大家分享的是有关利用C#怎么编写一个Windows组和用户管理功能系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联建站成都企业网站建设服务,提供做网站、成都网站设计网站开发,网站定制,建网站,网站搭建,网站设计,响应式网站,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:028-869222201、WindowsAccountHelper类实现
using System; using System.Collections.Generic; using System.DirectoryServices.AccountManagement; using System.Linq; public class WindowsAccountHelper { public static string LastErrorMsg { get; private set; } public static ListGetGroups() { var groups = new List (); try { var context = new PrincipalContext(ContextType.Machine); var queryGroup = new GroupPrincipal(context); var searcher = new PrincipalSearcher(queryGroup); searcher.FindAll().ToList().ForEach(t => groups.Add(t.Name)); } catch (Exception) { groups.Clear(); } return groups; } public static List GetGroupUsers(string groupName) { var group = GetGroup(groupName); return GetGroupUsers(group); } public static List GetGroupUsers(GroupPrincipal group) { var users = new List (); if (group == null) { return users; } group.GetMembers().ToList().ForEach(t => users.Add(t.Name)); return users; } public static GroupPrincipal GetGroup(string groupName) { GroupPrincipal group = null; try { var context = new PrincipalContext(ContextType.Machine); var queryGroup = new GroupPrincipal(context); var searcher = new PrincipalSearcher(queryGroup); foreach (var principal in searcher.FindAll()) { var groupPrincipal = (GroupPrincipal)principal; if (groupPrincipal != null && groupPrincipal.Name.Equals(groupName)) { group = groupPrincipal; break; } } } catch (Exception) { // ignored } return group; } public static GroupPrincipal CreateGroup(string groupName, string description, bool isSecurityGroup) { GroupPrincipal group; try { group = GetGroup(groupName); if (group == null) { var context = new PrincipalContext(ContextType.Machine); group = new GroupPrincipal(context) { Name = groupName, Description = description, IsSecurityGroup = isSecurityGroup, GroupScope = GroupScope.Local }; group.Save(); } } catch (Exception e) { LastErrorMsg = e.Message; group = null; } return group; } public static bool DeleteGroup(string groupName) { var group = GetGroup(groupName); if (group == null) { return true; } var ret = true; try { group.Delete(); } catch (Exception) { ret = false; } return ret; } public static bool CreateWindowsAccount(string userName, string password, string displayName, string description, bool cannotChangePassword, bool passwordNeverExpires, string groupName) { bool ret; try { var context = new PrincipalContext(ContextType.Machine); var group = GroupPrincipal.FindByIdentity(context, groupName); if (group == null) { return false; } ret = CreateWindowsAccount(userName, password, displayName, description, cannotChangePassword, passwordNeverExpires, group); } catch (Exception) { ret = false; } return ret; } public static bool CreateWindowsAccount(string userName, string password, string displayName, string description, bool cannotChangePassword, bool passwordNeverExpires, GroupPrincipal group) { bool ret; try { if (group == null) { return false; } var context = new PrincipalContext(ContextType.Machine); var user = UserPrincipal.FindByIdentity(context, userName) ?? new UserPrincipal(context); user.SetPassword(password); user.DisplayName = displayName; user.Name = userName; user.Description = description; user.UserCannotChangePassword = cannotChangePassword; user.PasswordNeverExpires = passwordNeverExpires; user.Save(); group.Members.Add(user); group.Save(); ret = true; } catch (Exception) { ret = false; } return ret; } public static bool DeleteWindowsAccount(List userNameList) { var ret = true; try { foreach (var userName in userNameList) { var context = new PrincipalContext(ContextType.Machine); var user = UserPrincipal.FindByIdentity(context, userName); user?.Delete(); } } catch (Exception) { ret = false; } return ret; } public static bool ChangeUserGroup(string userName, string groupName) { bool ret; try { var context = new PrincipalContext(ContextType.Machine); var group = GroupPrincipal.FindByIdentity(context, groupName); if (group == null) { return false; } ret = ChangeUserGroup(userName, group); } catch (Exception) { ret = false; } return ret; } public static bool ChangeUserGroup(string userName, GroupPrincipal group) { bool ret; try { if (group == null) { return false; } var context = new PrincipalContext(ContextType.Machine); var user = UserPrincipal.FindByIdentity(context, userName); if (user == null) { return false; } if (!group.Members.Contains(user)) { group.Members.Add(user); group.Save(); } ret = true; } catch (Exception) { ret = false; } return ret; } public static int UpdateGroupUsers(string groupName, List userNames, string password = "") { var group = CreateGroup(groupName, string.Empty, false); if (group == null) { return 0; } var userNameList = new List (); userNameList.AddRange(userNames); var addedUsers = new List (); int groupUserCount; try { foreach (var principal in group.GetMembers()) { var user = (UserPrincipal)principal; if (user == null) { continue; } if (userNameList.Contains(user.Name)) { //已有用户 addedUsers.Add(user.Name); } else { user.Delete(); } } //已有用户数 groupUserCount = addedUsers.Count; //剩余的即为需要添加的用户集合 foreach (var userName in addedUsers) { userNameList.Remove(userName); } //创建用户 foreach (var userName in userNameList) { if (CreateWindowsAccount(userName, password, userName, string.Empty, false, false, group)) { groupUserCount++; } } } catch (UnauthorizedAccessException) { groupUserCount = 0; } return groupUserCount; } }
2、使用示例
private bool CreateGroupUsers(string groupName, ListwindowsUserList, string password, int userCount) { var group = WindowsAccountHelper.CreateGroup(groupName, string.Empty, true); if (group == null) { return false; } var userNames = WindowsAccountHelper.GetGroupUsers(group); foreach (var userName in WindowsUserList) { if (!userNames.Contains(userName)) { if (!WindowsAccountHelper.CreateWindowsAccount(userName, password, userName, string.Empty, false, false, group)) { return false; } } } return true; }
以上就是利用C#怎么编写一个Windows组和用户管理功能系统,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
名称栏目:利用C#怎么编写一个Windows组和用户管理功能系统-创新互联
网站URL:http://azwzsj.com/article/iodis.html