作者: 乔克斯
查看: 3996|回复: 9
打印 上一主题 下一主题

[教程] 【修改电脑密码】C#修改电脑密码,重置电脑密码DirectoryEnt...

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-9-20 00:49:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查看: 3996|回复: 9
C#修改电脑密码,重置电脑密码DirectoryEntry实现
说明:
鉴于此方法功力强大请各位武林好汉不要拿来做坏事哟,下面进入正题。

C#修改电脑密码方法如下:
[C#] 纯文本查看 复制代码
        /// <summary>
        /// 更改Windows帐户密码
        /// </summary>
        /// <param name="username"></param>
        /// <param name="oldPwd"></param>
        /// <param name="newPwd"></param>
        public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)
        {
            try
            {
                DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                DirectoryEntry user = localMachine.Children.Find(username, "user");
                object[] password = new object[] { oldPwd, newPwd };
                object ret = user.Invoke("ChangePassword", password);
                user.CommitChanges();
                localMachine.Close();
                user.Close();
            }
            catch (Exception)
            {

            }
        }


C#重置电脑密码如下:
[C#] 纯文本查看 复制代码
        /// <summary>
        /// 重置指定用户的密码
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">新密码</param>
        public static void ResetUserPassword(string userName, string password)
        {
            string _Path = "WinNT://" + Environment.MachineName;

            DirectoryEntry machine = new DirectoryEntry(_Path); //获得计算机实例
            DirectoryEntry user = machine.Children.Find(userName, "User"); //找得用户
            if (user != null)
            {
                user.Invoke("SetPassword", password); //用户密码
                user.CommitChanges();
            }
        }


下面提供一下类大家可以参考一下
[C#] 纯文本查看 复制代码
//1.创建windows帐户
/// <summary>
/// 创建Windows帐户
/// </summary>
/// <param name="pathname"></param>
/// <returns></returns>
public static void CreateLocalUser(string username, string password, string description)
{
    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
    var newUser = localMachine.Children.Add(username, "user");
    newUser.Invoke("SetPassword", new object[] { password });
    newUser.Invoke("Put", new object[] { "Description", description });
    newUser.CommitChanges();
    localMachine.Close();
    newUser.Close();
}

//2.更改Windows帐户密码

/// <summary>
/// 更改Windows帐户密码
/// </summary>
/// <param name="username"></param>
/// <param name="oldPwd"></param>
/// <param name="newPwd"></param>
public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)
{
    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
    DirectoryEntry user = localMachine.Children.Find(username, "user");
    object[] password = new object[] { oldPwd, newPwd };
    object ret = user.Invoke("ChangePassword", password);
    user.CommitChanges();
    localMachine.Close();
    user.Close();
}

//3.判断Windows用户是否存在

/// <summary>
/// 判断Windows用户是否存在
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public static bool ExistWinUser(string username)
{
    try
    {
        using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            var user = localMachine.Children.Find(username, "user");
            return user != null;
        }
    }
    catch
    {
        return false;
    }
}

//4.删除Windows用户

/// <summary>
/// 删除Windows用户
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public static bool DeleteWinUser(string username)
{
    try
    {
        using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            //删除存在用户
            var delUser = localMachine.Children.Find(username, "user");
            if (delUser != null)
            {
                localMachine.Children.Remove(delUser);
            }
        }
        return true;
    }
    catch
    {
        return false;
    }
}

//5.启用/禁用windows帐户

/// <summary>
/// 启用/禁用windows帐户
/// </summary>
/// <param name="username"></param>
public static void Disable(string username, bool isDisable)
{
    var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user";
    DirectoryEntry user = new DirectoryEntry(userDn);
    user.InvokeSet("AccountDisabled", isDisable);
    user.CommitChanges();
    user.Close();
}


实现思路:
  • 操作windows帐户的方法的诀窍在于通过DirectoryEntry 实例调用Invoke,InvokeGet,InvokeSet这三个方法。
  • 此三个方法可以对对本机 Active Directory 对象调用方法。
  • 操作win帐户的Active Directory 对象就是IADsUser接口。
  • DirectoryEntry 实例通过调用Invoke方法调用IADsUser接口的方法,如上面修改Windows帐户密码就是通过调用IADsUser接口的“ChangePassword”方法;
  • 通过InvokeGet和InvokeSet方法调用IADsUser接口的属性,如上面的启用/禁用windows帐户,调用IADsUser接口的“AccountDisabled”属性。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 转播转播
回复 论坛版权

使用道具 举报

沙发
zpchlover 发表于 2014-12-11 15:46:25 | 只看该作者
感谢分享!
回复

使用道具 举报

板凳
ssxh_tanhc 发表于 2015-2-11 14:37:04 | 只看该作者
good job, great
地板
CSdmin 发表于 2015-2-15 14:30:27 | 只看该作者
有点暴力
回复

使用道具 举报

5#
huhangfei 发表于 2015-2-15 15:04:46 | 只看该作者
改天试试。。
回复

使用道具 举报

6#
CSdmin 发表于 2015-2-15 15:40:12 | 只看该作者
Win7测试可用,有没有办法能让他在WinPE下能跑?
7#
CSdmin 发表于 2015-2-15 15:47:43 | 只看该作者
Win8使用微软账号会报找不到用户
8#
 楼主| 乔克斯 发表于 2015-2-15 16:44:47 | 只看该作者
CSdmin 发表于 2015-2-15 15:47
Win8使用微软账号会报找不到用户

这个改的是系统的密码账号。肯定不支持新的win8微软账号。
9#
 楼主| 乔克斯 发表于 2015-2-15 16:45:15 | 只看该作者
CSdmin 发表于 2015-2-15 15:47
Win8使用微软账号会报找不到用户

这个改的是系统的密码账号。肯定不支持新的win8微软账号。
10#
fengdaokanhai 发表于 2020-8-10 14:47:09 | 只看该作者
win10的可以吗??
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-12-25 15:08, Processed in 0.596955 second(s), 28 queries , Gzip On.

快速回复 返回顶部 返回列表