我试图获取Active Directory帐户的锁定状态,而不必使用VBScript绑定到它们。此查询也跨多个域。我找到了一个LDAP属性lockoutTime,但无法使其正常工作。
Const ADS_SCOPE_SUBTREE = 2
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
strFilter = "(&(objectClass=User)(sAMAccountName=userid))"
strAttrib = "distinguishedName,userAccountControl,pwdLastSet,lockoutTime"
strQuery = "<GC://dc=domain,dc=com>;" & strFilter & ";" & strAttrib & ";subtree"
objCommand.CommandText = strQuery
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount > 0 Then
If objRecordSet.Fields( "lockoutTime" ) > 0 Then
MsgBox "Account locked"
Else
MsgBox "Account not locked"
End If
End If
不幸的是,lockoutTime字段为null。我也找到了下面的代码,但是这对于lockoutTime字段为空都没有帮助,无论用户是否被锁定,因为我在当前锁定的用户帐户和未锁定的用户帐户上测试了它
Set objLockout = objRecordSet.Fields( "lockoutTime" )
If objLockout.lowpart = 0 And objLockout.highpart = 0 Then
MsgBox "Account not locked"
Else
MsgBox "Account locked"
End If
我不想绑定到每个帐户的原因是它大大减慢了脚本速度,而且我正在与经典的ASP网站一起执行此操作。我目前有一个网站使用查询绑定到每个帐户,然后测试一个只使用LDAP查询的网站,当只使用LDAP查询时,它的速度要快得多。