经典 ASP:类型不匹配:'GroupCheck'
Classic ASP: Type mismatch: 'GroupCheck'
我有一个名为 GroupCheck 的函数,它旨在从 AD 获取登录用户组。但是,它给我以下错误:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'GroupCheck'
/ldap.asp, line 67
第 67 行是我调用函数的地方,传入 Request.ServerVariables("AUTH_USER")
以下函数存储在页面顶部的文件中:
<%
function GroupCheck(user)
dim user, ADUser, objCom, objCon, objRS, membership
ADUser = "LDAP://OU=Staff,OU=Users,DC=example,DC=internal"
' Make AD connection and run query'
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.provider ="ADsDSOObject"
objCon.Properties("User ID") = "EXAMPLE\user"
objCon.Properties("Password") = "Test"
objCon.Properties("Encrypt Password") = TRUE
objCon.open "Active Directory Provider"
Set objCom = CreateObject("ADODB.Command")
Set objCom.ActiveConnection = objCon
objCom.CommandText = "SELECT memberOf FROM '" + ADUser + "' where sAMAccountName='*" + 'user + "*' AND UserAccountControl <> 514"
Set objRS = objCom.Execute
Do While Not objRS.EOF Or objRS.BOF
if isNull(objRS.Fields("memberOf").value) then
membership = ""
else
for each item in objRS.Fields("memberOf").value
membership = item + "<br>"
next
end if
if inStr(membership, "UserGroup") then
GroupCheck = 1
else
GroupCheck = 0
end if
objRS.MoveNext
Response.Flush
Loop
'Clean up'
objRS.Close
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
Set objCom = Nothing
end function
%>
真不知道是什么问题,因为/ldap.asp,第67行是:
Set getMembership(username)
编辑:我的 ldap.asp 代码是:
getMembership = GroupCheck(Request.ServerVariables("AUTH_USER"))
'This should fetch all the accounts that appears in the "Contact Centre" group
if getMembership = 1 then
'Response.Write "<td><a href='entry.asp?account_name=" & objRS("sAMAccountName") & "'>Edit</a></td>"
elseif objRS("sAMAccountName") = session("username") then
Response.Write "<td><a href='entry.asp?account_name=" & objRs("sAMAccountName") + "'>Edit</a></td>"
else Response.Write "<td></td>"
end if
Response.Write "</tr>" + vbCrL
objRS.MoveNext
Response.Flush
Loop
Response.Write "</table>"
' Clean up
objRS.Close
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
Set objCom = Nothing
%>
那么第 67 行到底是什么?
Set getMembership(username)
或
[unknown variable] = GroupCheck(Request.ServerVariables("AUTH_USER"))
?
无论如何,这可能是问题的原因:
objCom.CommandText = "SELECT memberOf FROM '" + ADUser + "' where sAMAccountName='*" + 'user + "*' AND UserAccountControl <> 514"
在 VBScript 中,+
运算符用于算术加法。 "SELECT memberOf From '"
不能转换成数字;因此类型不匹配。大概。 (我不能确定,因为我不知道你是如何调用或包含函数的。)
而是使用正确的 VBScript 连接运算符 &
。
objCom.CommandText = "SELECT memberOf FROM '" & ADUser & "' where sAMAccountName='*" & user & "*' AND UserAccountControl <> 514"
此外,您可能会搬起石头砸自己的脚,将与函数参数同名的变量变暗:
function GroupCheck(user)
dim user, ADUser, objCom, objCon, objRS, membership
'^^^^
如果你这样做它可能仍然有效,但这不是一个好主意。
我有一个名为 GroupCheck 的函数,它旨在从 AD 获取登录用户组。但是,它给我以下错误:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'GroupCheck'
/ldap.asp, line 67
第 67 行是我调用函数的地方,传入 Request.ServerVariables("AUTH_USER")
以下函数存储在页面顶部的文件中:
<%
function GroupCheck(user)
dim user, ADUser, objCom, objCon, objRS, membership
ADUser = "LDAP://OU=Staff,OU=Users,DC=example,DC=internal"
' Make AD connection and run query'
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.provider ="ADsDSOObject"
objCon.Properties("User ID") = "EXAMPLE\user"
objCon.Properties("Password") = "Test"
objCon.Properties("Encrypt Password") = TRUE
objCon.open "Active Directory Provider"
Set objCom = CreateObject("ADODB.Command")
Set objCom.ActiveConnection = objCon
objCom.CommandText = "SELECT memberOf FROM '" + ADUser + "' where sAMAccountName='*" + 'user + "*' AND UserAccountControl <> 514"
Set objRS = objCom.Execute
Do While Not objRS.EOF Or objRS.BOF
if isNull(objRS.Fields("memberOf").value) then
membership = ""
else
for each item in objRS.Fields("memberOf").value
membership = item + "<br>"
next
end if
if inStr(membership, "UserGroup") then
GroupCheck = 1
else
GroupCheck = 0
end if
objRS.MoveNext
Response.Flush
Loop
'Clean up'
objRS.Close
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
Set objCom = Nothing
end function
%>
真不知道是什么问题,因为/ldap.asp,第67行是:
Set getMembership(username)
编辑:我的 ldap.asp 代码是:
getMembership = GroupCheck(Request.ServerVariables("AUTH_USER"))
'This should fetch all the accounts that appears in the "Contact Centre" group
if getMembership = 1 then
'Response.Write "<td><a href='entry.asp?account_name=" & objRS("sAMAccountName") & "'>Edit</a></td>"
elseif objRS("sAMAccountName") = session("username") then
Response.Write "<td><a href='entry.asp?account_name=" & objRs("sAMAccountName") + "'>Edit</a></td>"
else Response.Write "<td></td>"
end if
Response.Write "</tr>" + vbCrL
objRS.MoveNext
Response.Flush
Loop
Response.Write "</table>"
' Clean up
objRS.Close
objCon.Close
Set objRS = Nothing
Set objCon = Nothing
Set objCom = Nothing
%>
那么第 67 行到底是什么?
Set getMembership(username)
或
[unknown variable] = GroupCheck(Request.ServerVariables("AUTH_USER"))
?
无论如何,这可能是问题的原因:
objCom.CommandText = "SELECT memberOf FROM '" + ADUser + "' where sAMAccountName='*" + 'user + "*' AND UserAccountControl <> 514"
在 VBScript 中,+
运算符用于算术加法。 "SELECT memberOf From '"
不能转换成数字;因此类型不匹配。大概。 (我不能确定,因为我不知道你是如何调用或包含函数的。)
而是使用正确的 VBScript 连接运算符 &
。
objCom.CommandText = "SELECT memberOf FROM '" & ADUser & "' where sAMAccountName='*" & user & "*' AND UserAccountControl <> 514"
此外,您可能会搬起石头砸自己的脚,将与函数参数同名的变量变暗:
function GroupCheck(user)
dim user, ADUser, objCom, objCon, objRS, membership
'^^^^
如果你这样做它可能仍然有效,但这不是一个好主意。