使用C#實(shí)現(xiàn)Windows組和用戶管理的示例代碼
更新時(shí)間:2021年01月07日 11:14:19 作者:xhubobo
這篇文章主要介紹了使用C#實(shí)現(xiàn)Windows組和用戶管理的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
1、WindowsAccountHelper類(lèi)實(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組和用戶管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- c# WPF實(shí)現(xiàn)Windows資源管理器(附源碼)
- c# WPF中System.Windows.Interactivity的使用
- 如何使用C#修改本地Windows系統(tǒng)時(shí)間
- c# 將Minio.exe注冊(cè)成windows服務(wù)
- windows系統(tǒng)下,如何在C#程序中自動(dòng)安裝字體
- C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享
- C#創(chuàng)建簡(jiǎn)單windows窗體應(yīng)用(加法器)
- C#開(kāi)發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件
- C#編寫(xiě)Windows服務(wù)程序詳細(xì)步驟詳解(圖文)
- C# 屏蔽由于崩潰彈出的windows異常彈框
- c# 使用特定帳號(hào)密碼訪問(wèn)Windows網(wǎng)路共享
相關(guān)文章
DevExpress實(shí)現(xiàn)GridView當(dāng)無(wú)數(shù)據(jù)行時(shí)提示消息
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridView當(dāng)無(wú)數(shù)據(jù)行時(shí)提示消息,需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)讀取寫(xiě)入Json文件
這篇文章主要介紹了C#實(shí)現(xiàn)讀取寫(xiě)入Json文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)
網(wǎng)絡(luò)喚醒實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)的集中管理,即在任何時(shí)刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程喚醒一臺(tái)處于休眠或關(guān)機(jī)狀態(tài)的計(jì)算機(jī),下面使用c#實(shí)現(xiàn)網(wǎng)絡(luò)喚醒功能2014-01-01

