用戶自己修改Windows域賬號(hào)密碼 的VB2010代碼
用戶自己修改Windows 域賬號(hào)密碼 的VB2010代碼(2013-06-12 19:26:46)用戶自己修改Windows 域賬號(hào)密碼 的VB2010代碼,如下是我專研的結(jié)果,以下代碼適用于Win
用戶自己修改Windows 域賬號(hào)密碼 的VB2010代碼
(2013-06-12 19:26:46)
用戶自己修改Windows 域賬號(hào)密碼 的VB2010代碼,如下是我專研的結(jié)果,以下代碼適用于Windows 2000以上任何域環(huán)境下,而且任何任何域名下,生成應(yīng)用程序之后在任何域名任何Windows AD 域環(huán)境下都可以用,包括最新的Windows Server 2012域環(huán)境下都可以用。
Imports System.DirectoryServices
Public Class Form1
Public Err As String
Public PWD_Changed As Boolean = False
Public P_Rund As Boolean = False
Public DomainName As String = ""
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If Me.OldPassword.Text = "" And Me.NewPassword.Text = "" And Me.ComfirmPassword.Text = "" Then
Err = "舊密碼不能為空!"
Me.OldPassword.Focus()
ElseIf Me.OldPassword.Text = "" And Me.NewPassword.Text <> "" And Me.ComfirmPassword.Text <> "" Then Err = "舊密碼不能為空!"
Me.OldPassword.Focus()
ElseIf Me.OldPassword.Text <> "" And Me.NewPassword.Text = "" And Me.ComfirmPassword.Text = "" Then Err = "新密碼不能為空!"
Me.NewPassword.Focus()
ElseIf Me.OldPassword.Text <> "" And Me.NewPassword.Text <> "" And Me.ComfirmPassword.Text = "" Then Err = "新密碼不能為空!"
Me.ComfirmPassword.Focus()
Else
If Me.ComfirmPassword.Text <> Me.NewPassword.Text And Me.OldPassword.Text <> "" Then
Me.NewPassword.Text = ""
Me.ComfirmPassword.Text = ""
Me.NewPassword.Focus()
Err = "您兩次輸入的新密碼不一樣!"
Else
Call Change_Password()
End If
End If
PWD_Status.Clear()
If PWD_Changed = True Then
PWD_Status.Text = Err
Me.Button3.Enabled = False
Exit Sub
End If
If P_Rund = True Then
PWD_Status.Text = Err
Me.OldPassword.Text = ""
Me.NewPassword.Text = ""
Me.ComfirmPassword.Text = ""
Me.OldPassword.Focus()
P_Rund = False
Exit Sub
,End If
PWD_Status.Text = Err
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TxtAccount.Text = System.Environment.UserName
TxtAccount.Enabled = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '當(dāng)關(guān)閉程序的時(shí)候釋放資源
Me.Close()
Me.Dispose()
End
End Sub
Private Sub Change_Password()
Dim UserName As String = TxtAccount.Text
Dim Oldpassword As String = Me.OldPassword.Text
Dim NewPassword As String = Me.NewPassword.Text
Dim Domain_IP As String = System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain.Forest.Name 'PDC Server IP Address Or Domain Name
Dim Domain As String = GetDomainName(System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain.Forest.Name)
Dim Ds_Path As String = "LDAP://" & Domain_IP & "/" & Domain
P_Rund = True
Try
'Login AD by userid
Dim AD As New DirectoryEntry(Ds_Path, UserName, Oldpassword)
Dim DeSearch As DirectorySearcher = New DirectorySearcher
DeSearch.SearchRoot = AD
DeSearch.Filter = "(&(objectClass=user)(sAMAccountName=" UserName "))"
DeSearch.SearchScope = SearchScope.Subtree
Dim Results As SearchResult = DeSearch.FindOne()
If Not (Results Is Nothing) Then
AD = New DirectoryEntry(Results.Path, UserName, Oldpassword, AuthenticationTypes.Secure)
'Change Password
AD.Invoke("ChangePassword", New Object() {Oldpassword, NewPassword})
AD.CommitChanges()
Err = "密碼更改成功,請(qǐng)記住您的新密碼!"
PWD_Changed = True
AD.Dispose()
DeSearch.Dispose()
AD.Close()
End If
Catch ex As Exception
If Not (ex.InnerException Is Nothing) Then
'Err = ex.Message & " " & ex.InnerException.Message
Err = ex.InnerException.Message
Else
Err = ex.Message
End If
,'Return
'Throw New Exception("User Password cannot be set" & ex.Message) 'err = de.InvokeGet("ChangePassword").ToString & " "
End Try
End Sub
Private Function GetDomainName(ByVal Domain As String) As String Dim SplitStr As String() = Nothing
Dim DomainName As String = ""
'Domain
If Domain.Contains(".") Then
SplitStr = Domain.Split("."c)
For Each item As String In SplitStr
If DomainName = "" Then
DomainName = "DC=" & item
Else
DomainName = "," & "DC=" & item
End If
Next
Else
DomainName = "DC=" & Domain
End If
Return DomainName
End Function
End Class