2012-07-17 65 views
0

我有一个脚本,显示特定AD用户所属的组的过滤列表。它的工作原理完全正常作为一个VBS文件,但在导入到任何一个HTA或HTML文件时,它运行下面的“objRecordSet.MoveFirst”线的时候给了我一个“搜索筛选器无法识别”错误消息。脚本可用作VBS但不是HTML

Dim User 
Dim DIA 
Dim GroupList 

DIA = "No" 
User = "UserNic" 

Const ADS_SCOPE_SUBTREE = 2 
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D 

Set objConnection = CreateObject("ADODB.Connection") 
Set objCommand = CreateObject("ADODB.Command") 
objConnection.Provider = "ADsDSOObject" 
objConnection.Open "Active Directory Provider" 
Set objCommand.ActiveConnection = objConnection 

objCommand.Properties("Page Size") = 1000 
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = _ 
    "SELECT memberOf FROM 'LDAP://dc=company,dc=com' WHERE objectCategory='user' And mailnickname='" & User & "'" 
Set objRecordSet = objCommand.Execute 

objRecordSet.MoveFirst 

Do Until objRecordSet.EOF 
    arrMemberOf = objRecordSet.Fields("memberOf") 
     if isArray(objRecordSet.Fields("memberOf")) Then 
      For Each x in arrMemberOf 
       If InStr(x,"GroupFilter") <> 0 Then 
        Group = x 
        Group = Right(Group,Len(Group)-3) 
        Group = Left(Group,InStr(Group,",")-1) 
        GroupList = Group & vbCrLf & GroupList 
       End If 
       If InStr(x,"DIA") <> 0 Then DIA = "Yes" 
      Next 
     End if 
    objRecordSet.MoveNext 
Loop 

WScript.Echo GroupList 
WScript.echo "DIA: " & DIA 

我也有另外一个脚本这是几乎相同的是确实在HTA/HTML格式工作。这其中只是显示了一个电子邮件帐户,如果在所有转发:

Const ADS_SCOPE_SUBTREE = 2 

Set objConnection = CreateObject("ADODB.Connection") 
Set objCommand = CreateObject("ADODB.Command") 
objConnection.Provider = "ADsDSOObject" 
objConnection.Open "Active Directory Provider" 
Set objCommand.ActiveConnection = objConnection 

objCommand.Properties("Page Size") = 1000 
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = _ 
    "SELECT Name, altRecipient FROM 'LDAP://dc=company,dc=com' WHERE objectCategory='user' And Name='*" & Hosp & "' And altRecipient='*'" 
Set objRecordSet = objCommand.Execute 

objRecordSet.MoveFirst 

Count = 0 
Do Until objRecordSet.EOF 
    Name(Count) = objRecordSet.Fields("Name").Value 
    Forward(Count) = objRecordSet.Fields("altRecipient").Value 

    arrLines = Split(Forward(Count),",") 
    search = Filter(arrLines,"CN=",True,1) 
    for each x in search 
     Forward(Count) = x 
    Next 
    Forward(Count) = Replace(Forward(Count),"CN=","") 

    objRecordSet.MoveNext 
    Count = Count + 1 
Loop 

我似乎无法找到每个脚本的“objRecordSet.MoveFirst”线之间的功能差异。

请帮忙!

编辑:这里

相同的结果。试过的代码来执行相同的操作的备用块 - 工作正常,如VBS而不是HTA:

Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 
Set objCommand = CreateObject("ADODB.Command") 
objCommand.ActiveConnection = objConnection 
objCommand.CommandText = "<LDAP://dc=domain,dc=com>;" & "(&(objectCategory=Person)(mailnickname=" & User & "));" & "distinguishedName,Name;subtree" 
Set objRecordSet = objCommand.Execute 

intCount = 0 
If objRecordSet.EOF Then 
    Set WshShell = CreateObject("WScript.Shell") 
    message = WshShell.Popup ("Unable to find a user with the alias '" & User & "'! Please try again...",, "programname", 0 + 16) 
    'Exit Sub 
Else 
    While NOt objRecordSet.EOF 
     intCount = intCount + 1 
     objRecordSet.MoveNext 
    WEND 
     If intCount = 1 Then 
      objRecordSet.MoveFirst 
      Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedname")) 
      Set colGroups = objUser.Groups 
      For Each objGroup in colGroups 
       Group = objGroup.CN 
       GroupList = Group & vbCrLf & GroupList 
      Next 
     End If 
End If 

WScript.Echo GroupList 
+0

你是如何运行'HTML'文件,从本地机器上,或者从服务器?与正在计算机上运行的'VBS'文件相比,浏览器具有非常强的安全限制 – freefaller 2012-07-17 17:20:16

+0

工作和非工作脚本都从NAS运行。工作脚本同时适用于HTA和HTML格式(我已将它们都作为受信任的站点添加,并且在自定义安全级别下启用了“跨数据源访问数据源”。) – VoidnessMD 2012-07-17 17:25:15

+0

非常奇怪...抱歉,不知道什么是错误的。 祝你好运 – freefaller 2012-07-17 17:29:02

回答

0

如果您使用的是64位操作系统,尝试从命令运行32位MSHTA.exe行:

C:\Windows\System32\mshta.exe C:\YOUR_PATH\yourscript.hta 

我有问题,与64位版本(C:\ WINDOWS \ Syswow64资料\ mshta.exe)不支持的COM/ActiveX接口。 Windows 7将默认打开.HTA文件,并使用64位版本。

0

在你的HTA中,你是把你的代码放在一个子函数还是函数中?

<script language = "VBScript"> 
Sub Window_Onload 
##your code here## 
End Sub 
</script> 

如果不是这样,它可能会混淆在尝试Dim USER作为全局变量。

而且perfer回声改写成类似

TextOut.innerHTML = GroupList 
</script> 
<html><body> 
<div id="TextOut"></div>