我需要通过我的.Net应用程序重置任何用户的Windows密码。我使用用户的用户名从AD服务器获取其目录条目。我有两种不同的方法来更改密码:
entry.Invoke("ChangePassword", oldPass, newPass);
&安培;
entry.Invoke("SetPassword", "pass@123");
但是在实时AD服务器上尝试这些方法时出现以下错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
我有2台AD服务器。其中一个是现场,另一个是测试目的。我只想检查我的代码是否正常工作。因为,在实时服务器上拒绝访问我无法更改,并通过代码稍后检查我自己的密码。 如果我使用测试AD服务器来更改密码,我不知道如何检查密码是否被更改。 请提供任何建议,以检查我的代码是否正常工作。 提前谢谢。
答案 0 :(得分:1)
我认为在调用调用之前,您没有获得正确的上下文设置。这是我用于类似的东西。您需要设置自己的变量:
我正在使用System.DirectoryServices.AccountManagement
来获取功能。
//Domain related info
string _DCToUse = "myserver.domain.local";
string _ADConDomain = "DC=domain,DC=local";
string _AdDomain = "domain";
string _ADAdminUser = "administrator";
string _ADAdminPass = "password";
//User specific
string _UserName = "jsmith";
string _CurrentPass = "oldPass";
string _NewPass = "newPass";
PrincipalContext principalContext =
new PrincipalContext(ContextType.Domain, _DCToUse,
_ADConDomain, _ADDomain+@"\"+_ADAdminUser, _ADAdminPass);
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, _UserName);
if (user == null)
{
string ADErrorMsg = "Couldn't find user, check your spelling.";
return Changed;
}
user.ChangePassword(oldPass, newPass);
user.Save();