使用DirectoryEntry对象调用ChangePassword

dex*_*ter 5 .net c# active-directory

无论我试图抛出什么,这里的方法总会导致以下异常:

         var retVal = this.DirectoryEntry.Invoke("ChangePassword", new object[] { oldPassword, newPassword }) == null;
Run Code Online (Sandbox Code Playgroud)

InnerException = {"密码不符合密码策略要求.检查最小密码长度,密码复杂性和密码历史记录要求.(HRESULT异常:0x800708C5)"}

我自然检查了域默认策略(在我的测试域中找不到),OU组策略(不存在)并且找不到任何可以控制密码策略的内容,但无论我提供给函数的密码有多长或多复杂,它会导致相同的异常. 现在最有趣的部分 是当我做同样的事情(对于相同的DirectoryEntity对象和相同的密码),通过调用:

 var retVal = this.DirectoryEntry.Invoke("SetPassword", new object[] { newPassword }) == null;
Run Code Online (Sandbox Code Playgroud)

最后一次通话没有任何问题.

Har*_*wok 7

有许多组策略会影响密码的复杂性.安装Active Directory后,默认情况下大多数都处于打开状态.如果您在设置测试域后从未触及它们,那么这些密码策略仍然存在.

这是我的测试域默认域安全设置的样子.如果您之前没有更改它,它应该看起来相似.

默认域安全设置

您可以在MSDN上找到有关每个策略的详细说明.我将在此处添加摘要和链接.

以上所有设置都可能是导致0x800708C5错误的原因.特别是,我猜这是"最小密码时代"密码策略导致您遇到麻烦.它默认设置为1天.如果您的测试帐户是刚刚创建的新用户帐户,则您可能无法在同一天更改密码.

所以现在,您可能认为在测试环境中,您应该禁用所有这些密码策略以用于开发目的.我不建议通过取消选中属性页中的复选框来简单地定义所有策略.我会建议以下设置.

您需要做的最后一步是再次将组策略填充到您的计算机.请记住,组策略是存储在Active Directory中的设置.计算机组策略在计算机启动时应用,而用户组策略在用户登录时应用.密码策略是这些计算机策略之一.因此,您可以立即重新启动计算机,也可以转到命令提示符并运行gpupdate.

我希望我没有错过任何重要信息.如果它仍然无效,请告诉我:)