问题描述
C# code > error--->>>Unknown name. (Exception from HRESULT: 0x80020006 > (DISP_E_UNKNOWNNAME))
代码是这样的
using (DirectoryEntry entry = new DirectoryEntry("LDAP://*****-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))
推荐答案
只需按照下代码
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; }