Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic ASP:使用ADODB读取脚本.字典.命令结果_Asp Classic_Active Directory_Adodb_Ldap Query_Scripting.dictionary - Fatal编程技术网

Asp classic ASP:使用ADODB读取脚本.字典.命令结果

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

我正在尝试从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 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结果)