如何以编程方式更改Active Directory密码

Jef*_*eff 34 c# directoryservices active-directory

我有一组将要创建的测试帐户,但帐户将设置为在首次登录时要求更改密码.我想用C#编写一个程序来浏览测试帐户并更改密码.

tva*_*son 65

一旦找到了正确的UserPrincipal对象,只要您有足够的权限,就可以使用UserPrincipal类的SetPassword方法.使用FindByIdentity查找有问题的主要对象.

using (var context = new PrincipalContext( ContextType.Domain ))
{
  using (var user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, userName ))
  {
      user.SetPassword( "newpassword" );
      // or
      user.ChangePassword( "oldPassword", "newpassword" );

      user.Save();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 记得以后`user.Save()`. (5认同)
  • 这仅适用于.NET 3.5及更高版本,BTW(PrincipalContext和所有版本). (3认同)

Dan*_*olt 18

这是一个很棒的Active Directory编程快速参考:

Howto :(几乎)通过C#在Active Directory中的一切

请参阅末尾附近的密码重置代码.

public void ResetPassword(string userDn, string password)
{
    DirectoryEntry uEntry = new DirectoryEntry(userDn);
    uEntry.Invoke("SetPassword", new object[] { password });
    uEntry.Properties["LockOutTime"].Value = 0; //unlock account

    uEntry.Close();
}
Run Code Online (Sandbox Code Playgroud)


Ras*_*ara 12

试试这个代码.这个对我有用,

public void ChangeMyPassword(string domainName, string userName, string currentPassword, string newPassword)
{
    try
    {
        string ldapPath = "LDAP://192.168.1.xx";
        DirectoryEntry directionEntry = new DirectoryEntry(ldapPath, domainName + "\\" + userName, currentPassword);
        if (directionEntry != null)

        {
            DirectorySearcher search = new DirectorySearcher(directionEntry);
            search.Filter = "(SAMAccountName=" + userName + ")";
            SearchResult result = search.FindOne();
            if (result != null)
            {
                DirectoryEntry userEntry = result.GetDirectoryEntry();
                if (userEntry != null)
                {
                    userEntry.Invoke("ChangePassword", new object[] { currentPassword, newPassword });
                    userEntry.CommitChanges();
                }
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)