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このようにADサブツリーをクエリするには、ADOを使用してOLEDBプロバイダーを試してください

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 に答える