2012-12-07 32 views
0

我正在嘗試編寫使用管理員憑據連接到Active Directory的腳本。然後在整個域中搜索特定的用戶名,然後更新該用戶的屬性。我寫了一個我認爲應該可以工作的腳本,但我得到了「訪問被拒絕」的錯誤,足夠奇怪了。Vbscript - 編輯AD用戶時拒絕訪問用戶

下面是我已經放入章節的腳本。因爲它應該通過SuperOffice運行,它擁有自己獨特的環境。

Dim strUser, rootDSE, adoConnection, ldapStr, adoRecord, objUser 

updateUser() 

Public Sub updateUser() 
    ADUsername = "john.doe" 

    createADConnection() 

    If userExistsInAD(ADUsername) = False Then 
     Exit Sub 
    End if 

    objUser.Put "description", "testing" 
    objUser.SetInfo 
End Sub 

Public Sub createADConnection() 
    Set rootDSE = GetObject("LDAP://RootDSE") 
    Set adoConnection = CreateObject("ADODB.Connection") 
    adoConnection.Provider = "ADSDSOObject" 
    adoConnection.Properties("User ID") = "mydomain\administrator" 
    adoConnection.Properties("Password") = "8g773ggj024g" 
    adoConnection.Properties("Encrypt Password") = True 
    adoConnection.Properties("ADSI Flag") = ADS_SERVER_BIND Or ADS_SECURE_AUTHENTICATION 
    adoConnection.Open "Active Directory Provider" 
End Sub 

Public Function userExistsInAD(ByVal strUser) 
    ldapStr = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">;(&(objectCategory=Person)(objectClass=User)(samAccountName=" & strUser & "));adspath;subtree" 
    Set adoRecord = adoConnection.Execute(ldapStr) 
     If Not adoRecord.EOF Then 
     userExistsInAD = True 
     Exit Function 
    End if 

    userExistsInAD = False 
End Function 

回答

1

聽起來像你在運行SuperOffice的帳戶沒有域管理員憑據。您是否嘗試過直接使用您的帳戶運行它?

+0

嗨!是的,如果我使用管理員帳戶手動運行腳本,它就可以工作。但它需要從SuperOffice運行。這就是爲什麼我想直接在腳本中添加用戶名和密碼。我知道這不是一個好主意。我需要以某種方式從服務或其他東西運行實際的更新。我將不得不挖掘一下找到最好的解決方案:) –