2012-07-17 64 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>