使用 C# 在 Active Directory 中重置用户密码后,旧密码和新密码均有效
After resetting user's password in Active Directory using C#, both old and new passwords are working
以下是用于重置密码的代码。
我想停止这种行为。
只有新密码才有效。用户应该无法使用旧密码登录。
using (var search= new DirectorySearcher(dir))
{
search.Asynchronous = false;
search.CacheResults = false;
dirSearch.Filter = "(&(objectCategory=User)(objectClass=person)(name=" + UserName.Trim() + "))";
SearchResult result = dirSearch.FindOne();
if (result != null)
{
using (var entryUpdate = result.GetDirectoryEntry())
{
entryUpdate.Invoke("setpassword", new object[] { NewPassword });
entryUpdate.CommitChanges();
//entryUpdate.RefreshCache();
}
}
result = null;
}
只有当 Active Directory 复制中断时,才有可能同时拥有两个不同的密码。这实际上不是代码问题。修复它的方法是确定 AD 复制损坏的位置。您可以通过 运行 命令 repadmin /showrepl 快速检查 AD 运行状况。如果您看到错误,则在任何域控制器上 运行 dcdiag /v 在输出中显示错误。我现在最喜欢的一个确定 AD 运行状况的新工具也是 运行 PowerShell 实用程序 ADHealthCheck。
以下是用于重置密码的代码。
我想停止这种行为。
只有新密码才有效。用户应该无法使用旧密码登录。
using (var search= new DirectorySearcher(dir))
{
search.Asynchronous = false;
search.CacheResults = false;
dirSearch.Filter = "(&(objectCategory=User)(objectClass=person)(name=" + UserName.Trim() + "))";
SearchResult result = dirSearch.FindOne();
if (result != null)
{
using (var entryUpdate = result.GetDirectoryEntry())
{
entryUpdate.Invoke("setpassword", new object[] { NewPassword });
entryUpdate.CommitChanges();
//entryUpdate.RefreshCache();
}
}
result = null;
}
只有当 Active Directory 复制中断时,才有可能同时拥有两个不同的密码。这实际上不是代码问题。修复它的方法是确定 AD 复制损坏的位置。您可以通过 运行 命令 repadmin /showrepl 快速检查 AD 运行状况。如果您看到错误,则在任何域控制器上 运行 dcdiag /v 在输出中显示错误。我现在最喜欢的一个确定 AD 运行状况的新工具也是 运行 PowerShell 实用程序 ADHealthCheck。