2011-09-07 2 views
1
C# code  

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

을 변경하고 코드가이C# : 코드 오류 액티브 디렉토리 사용자의 암호

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)) 
+0

아래의 규정을 따르십시오. 어떤 실수라도 있으면. – sikender

+0

'entry '의 종류는 무엇입니까? – Gabe

+4

** 우리에게 ** 당신이'entry'를 만드는데 사용하는 LDAP 문자열을 보여주세요! –

답변

1

이 오류가 발생하고있는 동안은 찾지 못했음을 말한다 귀하의 LDAP 쿼리에 의해 사용자. 사용자를 찾는 코드를 점검하고 조회를 다시 실행하십시오.

1

DISP_E_UNKNOWNNAME은 활성 디렉토리가 시도에 응답하는 것처럼 보이지만 디렉토리 항목에 제공된 이름을 기반으로 사용자를 찾을 수 없습니다. 시도/검증 할 사항 :

  1. 디렉토리 항목에 적절한 정보가 입력되어 있는지 확인하십시오.
  2. 항목의 사용자 이름이 실제로 AD에 존재하는지 확인하십시오.
  3. 사용자 이름이 속한 OU가 쿼리에 반영되는지 확인하십시오.

나는 과거에이 오류를 받았으며 보편적으로 (광고용) 디렉토리 항목과 AD 내 사용자의 궁극적 인 위치 사이의 연결 해제를 중심으로 돌아갔습니다. OU의 차이로 인해 연결이 끊어 지거나 끊어 질 수 있습니다.

2

은 단순히 편집 모드로 가서 다시 코드를 넣어주세요

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; 
     }