0

特定の AD ユーザーがメンバーであるグループのフィルター処理されたリストを表示するスクリプトがあります。VBS ファイルとしては問題なく動作しますが、HTA または HTML ファイルにインポートすると、以下の「 objRecordSet.MoveFirst 」行を実行すると、 「検索フィルターを認識できません」というエラー メッセージが表示されます。

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
4

2 に答える 2

0

HTAで、コードをサブまたは関数の横に配置していますか?

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

そうでない場合は、USERをグローバル変数として暗くしようとして混乱している可能性があります。

また、エコーを次のようなものに書き直すこともできます

TextOut.innerHTML = GroupList
</script>
<html><body>
<div id="TextOut"></div>
于 2012-10-02T20:44:11.120 に答える
0

64ビットOSを使用している場合は、コマンドラインから32ビットMSHTA.exeを実行してみてください。

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

64ビットバージョン(C:\ Windows \ SysWOW64 \ mshta.exe)でCOM/ActiveXインターフェイスのサポートに失敗する問題が発生しました。Windows 7は、デフォルトで64ビットバージョンの .HTAファイルを開きます。

于 2012-09-13T02:24:00.690 に答える