Asp classic ASP:使用ADODB读取脚本.字典.命令结果
我正在尝试从Active Directory查询userAccountControl,并将其与我在脚本中设置的字典进行匹配 首先,我设置dictionary对象并填充它:Asp classic ASP:使用ADODB读取脚本.字典.命令结果,asp-classic,active-directory,adodb,ldap-query,scripting.dictionary,Asp Classic,Active Directory,Adodb,Ldap Query,Scripting.dictionary,我正在尝试从Active Directory查询userAccountControl,并将其与我在脚本中设置的字典进行匹配 首先,我设置dictionary对象并填充它: dim uac Set uac=Server.CreateObject("Scripting.Dictionary") uac.add "512", "Enabled Account" uac.add "514", "Disabled Account" uac.add "544", "Enabled, Password Not
dim uac
Set uac=Server.CreateObject("Scripting.Dictionary")
uac.add "512", "Enabled Account"
uac.add "514", "Disabled Account"
uac.add "544", "Enabled, Password Not Required"
uac.add "546", "Disabled, Password Not Required"
uac.add "66048", "Enabled, Password Doesn't Expire"
uac.add "66050", "Disabled, Password Doesn't Expire"
uac.add "66080", "Enabled, Password Doesn't Expire & Not Required"
uac.add "66082", "Disabled, Password Doesn't Expire & Not Required"
uac.add "262656", "Enabled, Smartcard Required"
uac.add "262658", "Disabled, Smartcard Required"
uac.add "262688", "Enabled, Smartcard Required, Password Not Required"
uac.add "262690", "Disabled, Smartcard Required, Password Not Required"
uac.add "328192", "Enabled, Smartcard Required, Password Doesn't Expire"
uac.add "328194", "Disabled, Smartcard Required, Password Doesn't Expire"
uac.add "328224", "Enabled, Smartcard Required, Password Doesn't Expire & Not Required"
uac.add "328226", "Disabled, Smartcard Required, Password Doesn't Expire & Not Required"
然后我连接到Active Directory以进行查询:
Set objDomain = GetObject ("GC://RootDSE")
objADsPath = objDomain.Get("defaultNamingContext")
Set objDomain = Nothing
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.provider ="ADsDSOObject"
objConn.Properties("User ID") = "domain\administrator"
objConn.Properties("Password") = "password"
objConn.Properties("Encrypt Password") = True
objConn.open "Active Directory Provider"
Set objCom = CreateObject("ADODB.Command")
Set objCom.ActiveConnection = objConn
objCom.CommandText ="select name,userAccountControl FROM 'GC://"+objADsPath+"' where sAMAccountname='*' and objectCategory='user' and objectCategory='person' ORDER by sAMAccountname"
然后我循环遍历结果,如下所示:
Set objRS = objCom.Execute
Do While Not objRS.EOF Or objRS.BOF
Response.Write objRS("name")
set uacResult = objRS("userAccountControl")
objRS.MoveNext
Response.Flush
Loop
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Set objCom = Nothing
Set objADsPath = Nothing
Set objDomain = Nothing
这一切都非常好。我现在要做的是查询我使用objRS(“userAccountControl”)的结果创建的uac字典。当我尝试这样做时,它返回一个空值
set uacResult = objRS("userAccountControl")
Response.Write uac.Item(uacResult)
Response.Write " (" & uacResult & ")"
我被难住了-objRS值是否作为字符串返回??写uac.Item(“512”)但如果我写Response.Write uac.Item(uacResult)则不起作用
有什么想法吗?找到了
我需要使用CStr()将objRS(“userAccountControl”)转换为字符串
这项工作:
set uacResult = objRS("userAccountControl")
Response.Write uac.Item(CStr(uacResult))
Response.Write " (" & uacResult & ")"
你已经找到了答案,但我想解释一下这里发生了什么
字典
对象的键可以是数组以外的任何类型(请参见)。由于使用了Set
语句,因此变量uacResult
是一个对象引用(稍后将详细介绍)。当您在字典
上调用项
方法时,它实际上是在寻找与对象引用匹配的键,而不是像您期望的那样搜索字符串CStr()
通过将对象引用显式转换为字符串来纠正这一点
由于在赋值中使用了Set
关键字,uacResult
最终包含对对象的引用,因为Recordset
对象的默认属性是字段
集合。调用CStr(uacResult)
时,这是通过调用字段
对象的默认属性,即值
属性,将对象转换为字符串。您可以通过几种不同的方式实现相同的效果:
”方法1-来自已接受的答案(https://stackoverflow.com/a/17786308/249624)
设置uacResult=objRS(“userAccountControl”)
响应。编写uac.项目(CStr(uac结果))
'方法2-显式使用Value属性
设置uacResult=objRS(“userAccountControl”)
响应。写入uac.项(uac结果值)
'方法3-将uacResult设置为字符串而不是字段对象
uacResult=objRS(“用户帐户控制”)
响应.写入uac.项目(uac结果)
'方法4-与方法3相同,但显式使用Value属性
uacResult=objRS(“userAccountControl”)。值
响应.写入uac.项目(uac结果)