脚本的工作原理VBS而不是HTML工作原理、脚本、而不是、VBS

2023-09-09 21:44:15 作者:挥霍完的爱

我有一个脚本,显示了哪些群体的特定AD用户是其成员的过滤列表。它的工作原理完美的罚款作为一个VBS文件,但在导入到任何一个HTA或HTML文件,它的搜索筛选器无法识别的运行时错误信息给我objRecordSet.MoveFirst的下面一行。

 昏暗用户
昏暗的DIA
昏暗的群组列表

DIA =否
用户=UserNic

常量ADS_SCOPE_SUBTREE = 2
常量E_ADS_PROPERTY_NOT_FOUND =安培; h8000500D

设置objConnection =的CreateObject(ADODB.Connection)
设置objCommand =的CreateObject(ADODB.Command)
objConnection.Provider =ADsDSOObject
objConnection.OpenActive Directory提供
设置objCommand.ActiveConnection = objConnection

objCommand.Properties(大小)= 1000
objCommand.Properties(SearchScope的)= ADS_SCOPE_SUBTREE

objCommand.CommandText = _
    选择的memberOf从LDAP:// DC =公司,DC = com的'WHERE objectCategory属性='用户'和的mailNickname ='&放大器;用户放大器; '
设置objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

做直到objRecordSet.EOF
    arrMemberOf = objRecordSet.Fields(成员​​)
        如果IsArray的(objRecordSet.Fields(成员​​))然后
            对于arrMemberOf每个x
                如果INSTR(X,GroupFilter)<> 0然后
                    组= X
                    组=右(集团莱恩(集团)-3)
                    组=左(集团INSTR(集团,) -  1)
                    群组列表=集团和放大器; vbCrLf&安培;群组列表
                结束如果
                如果INSTR(X,国防情报局)LT;> 0然后DIA =是
            下一个
        如果最终
    objRecordSet.MoveNext
循环

WScript.Echo群组列表
WScript.echoDIA:&放大器; DIA
 

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

 常量ADS_SCOPE_SUBTREE = 2

设置objConnection =的CreateObject(ADODB.Connection)
设置objCommand =的CreateObject(ADODB.Command)
objConnection.Provider =ADsDSOObject
objConnection.OpenActive Directory提供
设置objCommand.ActiveConnection = objConnection

objCommand.Properties(大小)= 1000
objCommand.Properties(SearchScope的)= ADS_SCOPE_SUBTREE

objCommand.CommandText = _
    选择名称,altRecipient从LDAP:// DC =公司,DC = com的'WHERE objectCategory属性='用户'和名称=*&放大器; HOSP和放大器; '和altRecipient ='*'
设置objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

数= 0
做直到objRecordSet.EOF
    名称(计数)= objRecordSet.Fields(姓名)。值
    转发(计数)= objRecordSet.Fields(altRecipient)。值

    arrLines =斯普利特(向前(计数),)
    搜索=过滤器(arrLines,CN =,真,1)
    在搜索每个x
        转发(计数)= X
    下一个
    转发(数)=更换(向前(计数),CN =,)

    objRecordSet.MoveNext
    伯爵=计数+ 1
循环
 

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

webshell脚本木马工作原理

请帮忙!

编辑:

下面相同的结果。尝试了code来执行相同的操作的备用块 - 工作正常,VBS而不是HTA:

 设置objConnection =的CreateObject(ADODB.Connection)
objConnection.Open供应商= ADsDSOObject;
设置objCommand =的CreateObject(ADODB.Command)
objCommand.ActiveConnection = objConnection
objCommand.CommandText =< LDAP:// DC =域,DC = com的取代; &放大器; (及(objectCategory属性=人)(或mailNickname =与&&用户安培;)); &放大器; distinguishedName来,名称;子树
设置objRecordSet = objCommand.Execute

intCount = 0
如果objRecordSet.EOF然后
    设置的WshShell =的CreateObject(WScript.Shell的)
    消息= WshShell.Popup(无法找到与别名用户与&用户放大器;'!请再试一次......,,PROGRAMNAME,0 + 16)
    退出小组
其他
    虽然没有objRecordSet.EOF
        intCount = intCount + 1
        objRecordSet.MoveNext
    WEND
        如果intCount = 1,则
            objRecordSet.MoveFirst
            设置objUser = GetObject的(LDAP://&放大器; objRecordSet.Fields(distinguishedName来))
            设置colGroups = objUser.Groups
            对于colGroups每个objGroup
                组= objGroup.CN
                群组列表=集团和放大器; vbCrLf&安培;群组列表
            下一个
        结束如果
结束如果

WScript.Echo群组列表
 

解决方案

在您的HTA,你将在你的身边code子或函数?

 < SCRIPT LANGUAGE =VBScript中>
子Window_Onload
 这里##您的code ##
结束小组
< / SCRIPT>
 

如果不是,它可能是搞乱在试图昏暗用户为全局变量。

另外perfer改写回声喜欢的东西

  TextOut.innerHTML =群组列表
< / SCRIPT>
< HTML><身体GT;
< D​​IV ID =的TextOut>< / DIV>
 

I have a script that shows a filtered list of what groups a particular AD user is a member of. It works perfectly fine as a VBS file, but when imported into either an HTA or HTML file it gives me a "The search filter cannot be recognized" error message when running the "objRecordSet.MoveFirst" line below.

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

I also have another script which is nearly identical that does work in HTA/HTML format. This one just shows where an email account is forwarded if at all:

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

I can't seem to find any functional differences between each script's "objRecordSet.MoveFirst" line.

Please help!

Edit:

Same results here. Tried an alternate chunk of code to perform the same actions - works fine as VBS but not 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

解决方案

In your HTA, are you putting your code in side a sub or function?

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

If not, it could be messing up in trying to Dim USER as a global variable.

Also perfer to rewrite the Echo to something like

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