0

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

4

1 回答 1

1

I think you're not getting a proper context setup before you call the invoke. Here's what I use for something similar. You'll need to set your own variables:

I'm using System.DirectoryServices.AccountManagement to get the functions.

//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();
于 2013-02-20T18:21:50.040 回答