检查Active Directory服务器上的密码重置

时间:2013-01-10 12:30:20

标签: c# active-directory

我需要通过我的.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服务器来更改密码,我不知道如何检查密码是否被更改。 请提供任何建议,以检查我的代码是否正常工作。 提前谢谢。

1 个答案:

答案 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();