关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享C#里根据Windows本地用户组查询组成员,以及修改密码教程,希望对大家能有一点小小的帮助。
【 tulaoshi.com - 编程语言 】
使用(System.DirectoryServices.Protocols使用"WinNT://"方式)
当前使用这个方式查找组成员的方法资料实在是太少.添加用户组等的功能,倒是能search到好多.用访问LDAP方式可以很轻松的用DirectorySearcher来查询出结果,但是部分机器没装加入域里,就不能行的通了.代码贴出来分享一下,恶意者看完请不要评价,直接闪人.谢谢!
主要的类就是这个,DEMO也有一个,要的联系我吧.tbyoml@google.com.代码里有注释,就不介绍代码了,类方法写的有小BUG,一般情况下不会出错,但是当你的机器用户组里存在用户,并且你无论在注册表里,或者是命令行下等都发现不了的时候,就会出错,这里我没有写上解决方案.(我在写C#代码创建本地用户且设置主文件夹权限的时候,搞出来几个名字N长的用户,不知道怎么回事).如果谁有更简单的方法请分享,谢谢!
using System;
using System.DirectoryServices; //这两个using一定要写上去
using System.DirectoryServices.Protocols;
using System.Collections;//要在reference里添加System.DirectoryServices.dll和System.DirectoryServices.Protocols.dll
namespace LocalGroupUserTest
{
/// summary
/// 主要包括下面两个方法,其他方法也可以用,主要为辅助主方法用
/// UpdatePassWord(string var) 修改本地密码的方法
/// GetUserInfoArrayList(string var) 根据用户组,查询本地包含用户HashTable(含名称、全名、描述)的数组
/// /summary
public class GroupUserOP
{
/// summary
/// 修改本地密码的方法
/// /summary
/// param name="intputPwd"输入的新密码/param
/// returns成功返回"success",失败返回exception/returns
public static string UpdatePassWord(string intputPwd)
{
try
{
DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry user = AD.Children.Find("test", "User");
user.Invoke("SetPassword", new object[] { intputPwd });
return "success";
}
catch (Exception ex)
{
return ex.ToString();
}
}
/// summary
/// 根据本地用户组获得组里的用户名数组
/// /summary
/// param name="localGroup"本地用户组/param
/// returns用户名数组/returns
static ArrayList GetUsersArrayList(DirectoryEntry directoryEntry)
{
ArrayList arrUsers = new ArrayList();
try
{
foreach (object member in (IEnumerable)directoryEntry.Invoke("Members"))
{
DirectoryEntry dirmem = new DirectoryEntry(member);
arrUsers.Add(dirmem.Name);
}
return arrUsers;
}
catch {return arrUsers; }
}
/// summary
/// 获得每个单独的用户信息
/// /summary
/// param name="userName"用户名/param
/// param name="directoryEntry"目录入口/param
/// returns单独用户信息的HashTable/returns
static Hashtable GetSingleUserInfo(string userName, string localGroup)
{
Hashtable ht = new Hashtable(); //HASHTABLE
try
{
DirectoryEntry group = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
try
{
System.DirectoryServices.DirectoryEntry user = group.Children.Find(userName, "User");
string FullName = Convert.ToString(user.Invoke("Get", new object[] { "FullName" }));
string Description = Convert.ToString(user.Invoke("Get", new object[] { "Description" }));
ht.Add("Username", userName);
ht.Add("FullName", FullName);
ht.Add("Description", Description);
}
catch { return ht; };
}
catch { }
return ht;
}
/// summary
/// 根据用户组,查询本地包含用户HashTable(含名称、全名、描述)的数组
/// /summary
/// param name="localGroup"用户组名称/param
/// returns包含用户HashTable(含名称、全名、描述)的数组/returns
public static ArrayList GetUserInfoArrayList(string localGroup)
{
ArrayList arr = new ArrayList();//al返回HASHTABLE数组用
ArrayList arrReviceUser = new ArrayList();//reviceUser接受用户数组用
try
{
DirectoryEntry group = new DirectoryEntry("WinNT://" + Environment.MachineName + "/" + localGroup + ",group");
arrReviceUser = GetUsersArrayList(group);
foreach (string user in arrReviceUser)
{
arr.Add(GetSingleUserInfo(user, localGroup));
}
}
catch (Exception ex)
{
string errMsg = ex.ToString();
}
return arr;
}
}
}
来源:http://www.tulaoshi.com/n/20160219/1600919.html
看过《C#里根据Windows本地用户组查询组成员,以及修改密码》的人还看了以下文章 更多>>