经典ASP:类型不匹配:'GroupCheck'

时间:2015-06-30 15:21:05

标签: asp-classic active-directory

我有一个名为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
%> 

1 个答案:

答案 0 :(得分:2)

那么第67行究竟是什么?

additionalSkuList

Set getMembership(username)

无论如何,这可能是导致问题的原因:

[unknown variable] = GroupCheck(Request.ServerVariables("AUTH_USER"))

在VBScript中,objCom.CommandText = "SELECT memberOf FROM '" + ADUser + "' where sAMAccountName='*" + 'user + "*' AND UserAccountControl <> 514" 运算符用于算术加法。 +无法转换为数字;因此类型不匹配。大概。 (我不能确定,因为我不知道你是如何打电话或包括这个功能的。)

相反,请使用正确的VBScript连接运算符"SELECT memberOf From '"

&

此外,你可能会通过调整与函数参数同名的变量来拍摄自己:

objCom.CommandText = "SELECT memberOf FROM '" & ADUser & "' where sAMAccountName='*" & user & "*' AND UserAccountControl <> 514"

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