经典 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
        '^^^^ 

如果你这样做它可能仍然有效,但这不是一个好主意。