2014-05-12 117 views
0

我知道这是丑陋的,我知道我应该试试块,我只是在试图让它工作。我在这里错过了一些东西,我真的很感激一些帮助。我所要做的就是创建一个包含登录名称文本框的页面,以及一个用于旧密码和两个用于新密码的页面。要添加更多信息,我现在得到的错误是 未知名称。 (异常来自HRESULT:0x80020006(DISP_E_UNKNOWNNAME)) 当我尝试调用ChangePasswordASP.NET更改AD密码

 Dim userid As String 
    Dim password As String 
    Dim login As String 
    Dim check As String 
    login = txtLogin.Text 
    userid = txtLogin.Text 
    password = txtOldPass.Text 
    Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://OU=PaidUsers,DC=LOCAL,DC=bb", "LOCAL\" & userid, password) 

    Dim obj As Object = entry.NativeObject 
    Dim search As DirectorySearcher = New DirectorySearcher(entry) 
    search.SearchScope = SearchScope.Subtree 
    search.Filter = "(SAMAccountName=" & login & ")" 
    Dim result As SearchResult = search.FindOne() 

    check = CType(result.Properties("sAMAccountName")(0), String) 

    If check = login Then 
     If txtNewPass.Text = txtNewPass2.Text Then 
      entry = result.GetDirectoryEntry() 
      entry.Username = "LOCAL\" & check 
      entry.Password = txtOldPass.Text 
      entry.AuthenticationType = AuthenticationTypes.Secure 
      entry.Options.Referral = ReferralChasingOption.All 
      entry.Invoke("ChangePassword", txtOldPass.Text, txtNewPass.Text) 
      entry.CommitChanges() 
      lblSuccess.Visible = True 

     Else 
      lblPasswdError.Visible = True 
     End If 

    Else 
     lblError.Visible = True 
    End If 
+0

我能够通过结合一系列不同项目的解决方案最终弄清楚这个代码,但我仍然知道并相信它需要大幅度清理。我只是认为这可以帮助别人解决同样的问题。解决方案代码已更改为上述代码。 – JTuman

+0

鼓励自问自答!随意发表您的评论作为答案。 –

回答

0

是固定的,是让调用“ChangePassword”前的目录项命令中的错误。我没有意识到的是,一旦我进入IF逻辑,入口目录条目没有我想要更改的帐户,因此出现UnknownName错误。调用我最初的LDAP查询的结果找到了用户帐户,它的工作就像一个魅力。工作代码在下面;

lblError.Visible = False 
    lblSuccess.Visible = False 
    lblPasswdError.Visible = False 
    lblCatch.Visible = False 
    Dim userid As String 
    Dim password As String 
    Dim check As String 
    userid = txtLogin.Text 
    password = txtOldPass.Text 
    Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://OU=PaidUsers,DC=LOCAL,DC=bb", "LOCAL\" & userid, password) 

    Try 

     Dim search As DirectorySearcher = New DirectorySearcher(entry) 
     search.SearchScope = SearchScope.Subtree 
     search.Filter = "(SAMAccountName=" & userid & ")" 
     Dim result As SearchResult = search.FindOne() 

     check = CType(result.Properties("sAMAccountName")(0), String) 
     If check <> Nothing Then 

      If check = userid Then 
       If txtNewPass.Text = txtNewPass2.Text Then 
        entry = result.GetDirectoryEntry() 
        entry.Username = "LOCAL\" & check 
        entry.Password = txtOldPass.Text 
        entry.AuthenticationType = AuthenticationTypes.Secure 
        entry.Options.Referral = ReferralChasingOption.All 
        entry.Invoke("ChangePassword", txtOldPass.Text, txtNewPass.Text) 
        entry.CommitChanges() 
        lblSuccess.Visible = True 

       Else 
        lblPasswdError.Visible = True 
       End If 

      Else 
       lblError.Visible = True 
      End If 
     Else 
      lblError.Visible = True 
     End If 
    Catch ex As Exception 
     lblCatch.Text = "Error message: " + ex.InnerException.Message 
     lblCatch.Visible = True 
    End Try