2012-09-25 68 views
0

我有一個遺留腳本來處理我們的學生帳戶的一些密碼重置,但當用戶移動到Sub 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中運行 - 爲什麼它不能向下搜索情境什麼想法?

回答

0

使用For Each的循環用戶效率極低。試着用ADO ADsDSOObject 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))否則風險就重置了計算機帳戶的密碼進行過濾。

+0

員工正在更改密碼的域與學生所在的域不同。是否有任何需要考慮的因素來反映這一點? – PipBoy

+0

不,只需使用你的'strLDAP',這個片段就應該像原來那樣獲取'objUser'。 – wqw