c#:更改活动目录用户密码时出现代码错误

本文关键字:密码 错误 代码 用户 活动 | 更新日期: 2023-09-27 18:08:04

C# code     
> error--->>>Unknown name. (Exception from HRESULT: 0x80020006
> (DISP_E_UNKNOWNNAME))

,代码是

using (DirectoryEntry entry = new DirectoryEntry("LDAP://admin-jyt69gl7t.hello/CN=Users,DC=hello"))
{
    entry.Username = username;
    entry.Password = strOldPassword;
    DirectorySearcher searcher = new DirectorySearcher(entry);
    try
    {
        searcher.FindOne();
        entry.AuthenticationType = AuthenticationTypes.Secure;
        entry.Invoke("ChangePassword", new object[] { strOldPassword, strNewPassword });
        //  oDE.Invoke("SetPassword", new object[] { strNewPassword });
        entry.CommitChanges();
    }
    catch (Exception excep)

我得到了这个异常

> Unknown name. (Exception from HRESULT: 0x80020006
> (DISP_E_UNKNOWNNAME))

c#:更改活动目录用户密码时出现代码错误

只需遵循

下面的代码
using System.DirectoryServices;

private DirectoryEntry GetUser(string UserName)
{
    DirectoryEntry de = GetDirectoryObject();
    DirectorySearcher deSearch = new DirectorySearcher();
    deSearch.SearchRoot = de;
    deSearch.Filter = "(&(objectClass=user)(SAMAccountName=" + UserName + "))";
    deSearch.SearchScope = SearchScope.Subtree;
    SearchResult results = deSearch.FindOne();
    if (!(results == null))
    {
       // **THIS IS THE MOST IMPORTANT LINE**
       de = new DirectoryEntry(results.Path, "username", "password", AuthenticationTypes.Secure); 
       return de;
    }
    else
    {
       return null;
    }
}
private DirectoryEntry GetDirectoryObject()
{
    DirectoryEntry oDE;
    oDE = new DirectoryEntry("LDAP://192.168.1.101", "username", "password", AuthenticationTypes.Secure);
    return oDE;
}

 public static bool ChangePassword(string UserName, string strOldPassword, string strNewPassword)
        {
            bool passwordChanged = false;
            DirectoryEntry oDE = GetUser(UserName, strOldPassword);
            if (oDE != null)
            {
                try
                {
                    // Change the password.
                    oDE.Invoke("ChangePassword", new object[] { strOldPassword, strNewPassword });
                    passwordChanged = true;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("Error changing password. Reason: " + ex.Message);
                }
            }
            return passwordChanged;
        }

此错误表示您没有通过LDAP查询找到该用户。检查找到用户的代码,并再次运行查询。

DISP_E_UNKNOWNNAME使活动目录看起来正在响应尝试,但它无法根据目录条目中提供的名称定位用户。

:
  1. 验证您的目录条目是否填充了正确的信息。
  2. 验证条目的用户名是否在AD中实际存在。
  3. 验证用户名所属的OU是否反映在您的查询中。

我过去收到过这个错误,通常(对我来说)它是围绕目录条目和用户在AD中的最终位置之间的断开。OU的差异可以建立或断开连接。