使用C#實(shí)現(xiàn)Windows組和用戶管理的示例代碼
更新時(shí)間:2021年01月07日 11:14:19 作者:xhubobo
這篇文章主要介紹了使用C#實(shí)現(xiàn)Windows組和用戶管理的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
1、WindowsAccountHelper類實(shí)現(xiàn)
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 List<string> GetGroups() { var groups = new List<string>(); 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<string> GetGroupUsers(string groupName) { var group = GetGroup(groupName); return GetGroupUsers(group); } public static List<string> GetGroupUsers(GroupPrincipal group) { var users = new List<string>(); 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<string> 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<string> userNames, string password = "") { var group = CreateGroup(groupName, string.Empty, false); if (group == null) { return 0; } var userNameList = new List<string>(); userNameList.AddRange(userNames); var addedUsers = new List<string>(); 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(); } } //已有用戶數(shù) groupUserCount = addedUsers.Count; //剩余的即為需要添加的用戶集合 foreach (var userName in addedUsers) { userNameList.Remove(userName); } //創(chuàng)建用戶 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, List<string> windowsUserList, 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#實(shí)現(xiàn)Windows組和用戶管理的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C#實(shí)現(xiàn)Windows組和用戶管理的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- c# WPF實(shí)現(xiàn)Windows資源管理器(附源碼)
- c# WPF中System.Windows.Interactivity的使用
- 如何使用C#修改本地Windows系統(tǒng)時(shí)間
- c# 將Minio.exe注冊成windows服務(wù)
- windows系統(tǒng)下,如何在C#程序中自動(dòng)安裝字體
- C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享
- C#創(chuàng)建簡單windows窗體應(yīng)用(加法器)
- C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件
- C#編寫Windows服務(wù)程序詳細(xì)步驟詳解(圖文)
- C# 屏蔽由于崩潰彈出的windows異常彈框
- c# 使用特定帳號密碼訪問Windows網(wǎng)路共享
相關(guān)文章
DevExpress實(shí)現(xiàn)GridView當(dāng)無數(shù)據(jù)行時(shí)提示消息
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridView當(dāng)無數(shù)據(jù)行時(shí)提示消息,需要的朋友可以參考下2014-08-08c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)
網(wǎng)絡(luò)喚醒實(shí)現(xiàn)了對網(wǎng)絡(luò)的集中管理,即在任何時(shí)刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程喚醒一臺處于休眠或關(guān)機(jī)狀態(tài)的計(jì)算機(jī),下面使用c#實(shí)現(xiàn)網(wǎng)絡(luò)喚醒功能2014-01-01