用DirectoryEntry修改域密码,旧密码依然可用

用DirectoryEntry修改域密码,修改成功后,新、旧密码可以同时使用,怎么回事?

using (DirectoryEntry objDE = new DirectoryEntry(strLDAP, DomainName + "\\" + commonName, oldPassword))
{
DirectorySearcher deSearcher = new DirectorySearcher(objDE);
deSearcher.Filter = "(&(objectClass=user)(sAMAccountName=" + commonName + "))";
DirectoryEntry usr = deSearcher.FindOne().GetDirectoryEntry();
usr.Invoke("ChangePassword", new Object[2] { oldPassword, newPassword });
usr.CommitChanges();
}
域控制器配置截图:
...全文
456 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanyushan 2015-08-18
  • 打赏
  • 举报
回复
修改密码后,旧密码会有一个有效期,具体的设置见:https://support.microsoft.com/en-us/kb/906305 推荐一篇博文有解析这种机制:http://bisheng.blog.51cto.com/409831/187263/
ccmsalome 2015-06-26
  • 打赏
  • 举报
回复
这个问题解决了么?求教
马老虎 2013-06-09
  • 打赏
  • 举报
回复
换台机器?!
  • 打赏
  • 举报
回复
引用 8 楼 jiaoshiyao 的回复:
必须要重启!!!
重启域控服务不行吗?
  • 打赏
  • 举报
回复
引用 8 楼 jiaoshiyao 的回复:
必须要重启!!!
重启什么,域控?
Justin-Liu 2013-06-08
  • 打赏
  • 举报
回复
引用 6 楼 isline 的回复:
[quote=引用 3 楼 FoxDave 的回复:] 重启一下域控试试,可能是有缓存
重启了,没用,问题很奇怪,修改密码后用DirectoryEntry 校验用户,输入旧密码已经无效了,但是有其他的通过域认证的系统旧密码仍然可以进。[/quote] 那看看那些系统上是不是有缓存呢?
  • 打赏
  • 举报
回复
引用 3 楼 FoxDave 的回复:
重启一下域控试试,可能是有缓存
重启了,没用,问题很奇怪,修改密码后用DirectoryEntry 校验用户,输入旧密码已经无效了,但是有其他的通过域认证的系统旧密码仍然可以进。
mansheng 2013-06-08
  • 打赏
  • 举报
回复
你记得修改后要重启一下,不然就去后台刷新,因为会缓存的。 /// <summary> /// 重置指定用户的密码 /// </summary> /// <param name="userName">用户名</param> /// <param name="password">新密码</param> public static void ResetUserPwd(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(); } }
EnForGrass 2013-06-08
  • 打赏
  • 举报
回复
重启一下

 /// <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)
            {
               
            }
        }
Justin-Liu 2013-06-08
  • 打赏
  • 举报
回复
重启一下域控试试,可能是有缓存
  • 打赏
  • 举报
回复
300分没人要?
jiaoshiyao 2013-06-08
  • 打赏
  • 举报
回复
必须要重启!!!
Zanvimocvy 2013-06-07
  • 打赏
  • 举报
回复
你那不是修改,是重新创建了一个密码、

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧