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

2016-02-19 12:27 97 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享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; };

(本文来源于图老师网站,更多请访问http://www.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;
        }
    }
}

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

来源:http://www.tulaoshi.com/n/20160219/1600919.html

延伸阅读
Windows7中修改家庭组密码有妙招   1、首先打开开始菜单,在开始搜索框中输入家庭组,回车然后打开家庭组窗口; 2、在弹出来的家庭组界面中单击下方的更改密码选项; 3、接着在弹出来的更改家庭组密码界面中,点击更改密码项; 4、在文本框中输入自己想要设置的家庭组密码,然后点击击下一步按钮; 5、这...
全国违章查询怎么修改密码   全国违章查询修改密码方法。很多有车一族手机里都有安装全国违章查询,但是有时候难免会泄露密码?泄露了密码之后就好的方法就是修改密码,那么要怎么修改密码呢?现在小编就教大家全国违章查询修改密码方法。 1)打开全国违章查询,点击右下角的,然后点击下方的; 2)点击下方的,接着点...
标签: 电脑入门
对于个人用户来说,家庭组功能属于非必要需求。多启动一项非必要的系统服务,对CPU、内存等硬件资源的消耗将影响系统的流畅运行。那么Win10下如何关闭家庭组呢? Win10退出家庭组的操作方法: 第一步、按下Win(微软徽标键)+X组合键,打开超级菜单,单击控制面板。 第二步、在控制面板主页,在小图标查看状态下,找到并单击家庭组。 第三步、...
其它方法见.用C#在本地创建一个Windows帐户(DirectoryServices)  http://yaosansi.com/blog/article.asp?id=917    在WinForm下该程序可写成:   (已测试通过,需要以Administrator身份运行)       using   System;       name...
笔记本Win7系统为什么计算机管理里没(图老师整理)有本地用户和组? 有的用户想在笔记本WIN7系统上开启Administrator帐户,通常来说我们只要进入到计算机管理中的本地用户和组就可以找到Administrator用户,双击后将帐户已禁用的勾取消即可,不过有的用户却在计算机管理中没有发现有本地用户和组,为什么会没有呢? 一般来说Win7旗...

经验教程

740

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部