C#里根据Windows本地用户组查询组成员,以及修改密码

王红尊

王红尊

2016-02-19 12:27

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享C#里根据Windows本地用户组查询组成员,以及修改密码教程,希望对大家能有一点小小的帮助。

使用(System.DirectoryServices.Protocols使用"WinNT://"方式)

当前使用这个方式查找组成员的方法资料实在是太少.添加用户组等的功能,倒是能search到好多.用访问LDAP方式可以很轻松的用DirectorySearcher来查询出结果,但是部分机器没装加入域里,就不能行的通了.代码贴出来分享一下,恶意者看完请不要评价,直接闪人.谢谢!

主要的类就是这个,DEMO也有一个,要的联系我吧.tbyoml@google.com.代码里有注释,就不介绍代码了,类方法写的有小BUG,一般情况下不会出错,但是当你的机器用户组里存在用户,并且你无论在注册表里,或者是命令行下等都发现不了的时候,就会出错,这里我没有写上解决方案.(我在写C#代码创建本地用户且设置主文件夹权限的时候,搞出来几个名字N长的用户,不知道怎么回事).如果谁有更简单的方法请分享,谢谢!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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; };

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)


            }
            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;
        }
    }
}

展开更多 50%)
分享

猜你喜欢

C#里根据Windows本地用户组查询组成员,以及修改密码

编程语言 网络编程
C#里根据Windows本地用户组查询组成员,以及修改密码

约你怎么移除群组成员

手机软件 应用软件
约你怎么移除群组成员

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

怎样重置Win10系统本地用户密码

电脑入门
怎样重置Win10系统本地用户密码

安司密信设置群组成员禁言方法

手机软件 应用软件
安司密信设置群组成员禁言方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

和通讯录批量添加分组成员方法图解

手机软件 应用软件
和通讯录批量添加分组成员方法图解

Linux系统中有效用户组和初始用户组有什么作用于区别?

服务器
Linux系统中有效用户组和初始用户组有什么作用于区别?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

访问MicrosoftJet数据库---用MicrosoftJet访问桌面数据库(一)

访问MicrosoftJet数据库---用MicrosoftJet访问桌面数据库(一)

发现个AJAX图片浏览器SIMPLEVIEWER

发现个AJAX图片浏览器SIMPLEVIEWER
下拉加载更多内容 ↓