0

我有一个旧脚本可以为我们的学生帐户处理一些密码重置,但是当用户移动到子 OU 并导致问题时,它似乎遇到了一些障碍。

基本上以下是 LDAP 连接字符串。

strLDAP ="LDAP://Studc01.student.college.ad:389/OU=Students,DC=student,DC=college,DC=ad"

如果学生帐户驻留在此主 OU 中,则该脚本似乎能够将其密码重置为指定的默认值。但是,如果帐户位于顶级学生 OU 的子 OU 中,则脚本会失败并失败。

该脚本如下所示,并从先前输入的文本字段中获取一些信息。

if request.form("AccountName")<> "" then
sAMAccountName = request.form("AccountName")
cUser = request.form("User")
else
response.write("There was an error no account details were given.")
response.end
End if

strLDAP ="LDAP://Studc01.student.college.ad:389/OU=Students,DC=student,DC=college,DC=ad"

Set obj = GetObject(strLDAP)

for each objUser in obj
if ucase(objUser.sAMAccountName) = ucase(sAMAccountName) then
Exit for
end if
next

Response.write("The password has now been reset (Password1) for account " &   objUser.sAMAccountName & ", thank you")

objUser.SetPassword "Password1"
objUser.Put "pwdLastSet", 0
objUser.SetInfo

这些脚本似乎使用 IIS 内应用程序池中的网络服务来运行 - 关于它为什么无法搜索上下文的任何想法?

4

1 回答 1

0

循环用户For Each是非常低效的。尝试ADsDSOObject使用 ADO 的 OLEDB 提供程序来像这样查询 AD 子树

strLDAP = "LDAP://" & GetObject("LDAP://RootDSE").Get("defaultNamingContext")
sAMAccountName = "wqw"

With CreateObject("ADODB.Connection")
    .Open "Provider=ADsDSOObject;Page Size=1000;Searchscope=2"
    With .Execute("<" & strLDAP & ">;(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & sAMAccountName & "));ADsPath;subtree")
        If Not .EOF Then
            Set objUser = GetObject(.Fields("ADsPath").Value)
            WScript.echo "Will reset password of " & objUser.name
        End If
    End With
End With

另请注意,您必须过滤域用户,(&(objectCategory=person)(objectClass=user))否则可能会重置计算机帐户的密码。

于 2012-09-26T07:47:55.803 回答