在.NET中忘记Active Directory密码脚本

时间:2011-04-21 17:55:07

标签: vb.net active-directory ldap

我正在使用基于网络的“忘记密码”来重置AD密码,使用LDAP。好吧,我可以解锁用户,但不能更改密码。

这是我的功能:

Private Function ChangeLocalUserPassword(ByVal User As String, ByVal Pass As String) As Boolean
    Dim pinger As New Net.NetworkInformation.Ping
    Dim usr As DirectoryEntry
    _de = GetDirectoryEntry()

    If _de Is Nothing Then
        'couldn't connect or find account
        MsgBox("_de is Nothing")
        Return False
    End If
    Try
        usr = _de.Children.Find("CN=" & User, "User")
    Catch ex As Exception
        MsgBox("User could not be found!")
        Return False
    End Try
    Try
        usr.Invoke("SetPassword", Pass)
        usr.CommitChanges()
        usr.Properties("LockOutTime").Value = 0
        usr.CommitChanges()
    Catch ex As Exception
        MsgBox("Error is " & ex.Message)
        Return False
    End Try

End Function

这是我的GetDirectoryEntry功能:

 Private Function GetDirectoryEntry() As DirectoryEntry
        Dim dirEntry As DirectoryEntry = New DirectoryEntry()
        dirEntry.Path = "LDAP://<SERVER>/ou=<OU>,dc=<DOMAIN>"
        dirEntry.Username = "<DOMAIN>\Administrator"          
        dirEntry.Password = "<PASSWORD>"
        Return dirEntry
    End Function

一个附带问题 - 任何人都建议我,如何在页面上对管理员用户进行硬编码?是否可以创建具有少数管理员权限的IUSR?

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:0)

试试这个,我在AD的轻量级目录服务实现上完成了这个。

Set password for active directory lightweight directory services (ad lds) on .net 2.0

基本上你必须先创建条目然后设置密码。

答案 1 :(得分:0)

重置密码PwdLastSet是关键属性。如果PwdLastSet的值设置为零,则用户在登录agin(see article)时必须更改其密码。

对于你的问题:

在Active-Directory中创建新用户。

在目标组织单位中,或直接在域容器中,您只需将重置密码的权限委派给新用户。因此,您的应用程序只操作一个允许重置密码的用户和密码。

答案 2 :(得分:0)

在AD中创建一个组,创建一个用户,将密码更改选项委派给该组,通常在OU级别完成。这是大多数组织在具有帮助台功能时执行此操作的方式 http://www.windowsecurity.com/articles/Implementing-Active-Directory-Delegation-Administration.html