C#: code error while changing the active directory user's password

后端 未结 3 998
既然无缘
既然无缘 2021-01-23 23:22
C# code     

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

and the code is this



        
相关标签:
3条回答
  • 2021-01-23 23:44

    Simply follow the code under

    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;
            }
    
    0 讨论(0)
  • 2021-01-23 23:47

    The DISP_E_UNKNOWNNAME makes it appear that the active directory is responding to the attempt, but it can't locate the user based on the name supplied in the directory entry. Some things to try/verify:

    1. Verify that your directory entry is populated with the proper information.
    2. Verify that the username of your entry actually exists in the AD.
    3. Verify that the OU the username belongs to is reflected in your query.

    I've received this error in the past, and universally (for me) it revolved around a disconnect between the directory entry and the ultimate location of the user within the AD. OU differences can make or break the connection.

    0 讨论(0)
  • 2021-01-24 00:00

    This error says that you didn't find the user by your LDAP query. Check the code that finds the user, and run your query again.

    0 讨论(0)
提交回复
热议问题