使用C#實現(xiàn)Windows組和用戶管理的示例代碼
更新時間:2021年01月07日 11:14:19 作者:xhubobo
這篇文章主要介紹了使用C#實現(xiàn)Windows組和用戶管理的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
1、WindowsAccountHelper類實現(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#實現(xiàn)Windows組和用戶管理的示例代碼的詳細內(nèi)容,更多關(guān)于C#實現(xiàn)Windows組和用戶管理的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- c# WPF實現(xiàn)Windows資源管理器(附源碼)
- c# WPF中System.Windows.Interactivity的使用
- 如何使用C#修改本地Windows系統(tǒng)時間
- c# 將Minio.exe注冊成windows服務(wù)
- windows系統(tǒng)下,如何在C#程序中自動安裝字體
- C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享
- C#創(chuàng)建簡單windows窗體應(yīng)用(加法器)
- C#開發(fā)windows服務(wù)實現(xiàn)自動從FTP服務(wù)器下載文件
- C#編寫Windows服務(wù)程序詳細步驟詳解(圖文)
- C# 屏蔽由于崩潰彈出的windows異常彈框
- c# 使用特定帳號密碼訪問Windows網(wǎng)路共享
相關(guān)文章
DevExpress實現(xiàn)GridView當(dāng)無數(shù)據(jù)行時提示消息
這篇文章主要介紹了DevExpress實現(xiàn)GridView當(dāng)無數(shù)據(jù)行時提示消息,需要的朋友可以參考下2014-08-08

