2016-01-25 32 views
2

“预期的声明结束”被编写脚本用于显示和记录验收使用了Active Directory中的最终用户许可协议。它被写入一个.hta文件并且大部分使用VBScript。在VBScript文件

我碰到了很多,我迄今固定的问题,但是这最后一个人把我难住了。

当文件被运行它给了我一个

“预期的声明结束”

错误的脚本的35行是:

27 For Each ln in dict.Items 
28  If ln = UserName Then 
29  wasFound = true 
30  End If 
31 Next 
32 If wasFound Then 
33  WScript.Quit() 
34  Else 
35  Call DisableTaskMgr 
36  Set objWMIService = GetObject("winmgmts:\\" & strComputer & wmiNS) 
37  Set colItems = objWMIService.ExecQuery(wmiQuery) 
38  For Each objItem in colItems 
39  objItem.terminate(1) 
40  Next 
41 End If 

我有不知道这是什么要求我改变。

完整的文件可以发现here

'On Error Resume Next 
Set objShell = CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 
System = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\" 
dim currentDir : currentDir = objShell.CurrentDirectory 
UserName = objShell.ExpandEnvironmentStrings("%USERNAME%") 
pathToDirectory = currentDir & "/store/directory.txt" 
wasFound = false 
row = 0 
Version = "V1.0" 
Set dict = CreateObject("Scripting.Dictionary") 
Set directoryfile = fso.OpentextFile(pathToDirectory, 1) 
dim strComputer : strComputer = "." 
dim wmiNS : wmiNS = "/root/cimv2" 
dim wmiQuery : wmiQuery = "Select processID from win32_process where name = 'explorer.exe'" 
dim objWMIService 
dim colItems 
dim objItem 
dim strOUT  

Do Until directoryfile.AtEndOfStream 
    line = directoryfile.Readline 
    dict.Add row, line 
    row = row + 1 
Loop 

directoryfile.Close 

For Each ln in dict.Items 
    If ln = UserName Then 
    wasFound = true 
    End If 
Next 
If wasFound Then 
    window.close 
Else 
    Call DisableTaskMgr 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & wmiNS) 
    Set colItems = objWMIService.ExecQuery(wmiQuery) 
    For Each objItem in colItems 
    objItem.terminate(1) 
    Next 
End If 

sub DisableTaskMgr 
    objShell.RegWrite System, "REG_SZ" 
    objShell.RegWrite System & "/DisableTaskMgr", 1, "REG_DWORD" 
end sub 

sub EnableTaskMgr 
    objShell.RegWrite System, "REG_SZ" 
    objShell.RegWrite System & "/DisableTaskMgr", 0, "REG_DWORD" 
end sub 

sub RestartExplorerExe 
    objShell.Run "explorer.exe" 
end sub 

sub Logon 
    Call EnableTaskMgr 
    If Not (fso.FileExists(currentDir & "/store/" & LCase(UserName) & ".csv")) Then 
    Set objFile = fso.CreateTextFile(currentDir & "/store/" & LCase(UserName) & ".csv", 2, True) 
    objFile.close 
    Else 
    End If 
    Set ObjOpenFile = fso.OpenTextFile(currentDir & "/store/" & UserName & ".csv", 8, -2) 
    objOpenFile.WriteLine(UserName & "," & Now & "," & Version) 
    objOpenFile.Close 
    Set objOpenFile = fso.OpenTextFile(currentDir & "/store/directory.txt", 8, -2) 
    objOpenFile.WriteLine(UserName) 
    objOpenFile.Close 
    Call RestartExplorerExe 
    window.close 
end sub 

sub Logoff 
    objShell.Run "shutdown /l" 
end sub 

如果你们发现代码中的其他任何愚蠢的错误,我会很感激那些也一直对这个剧本3个月左右的帮助。

编辑:现在大部分问题已得到修复,但我遇到了,这不是前出现一个非常奇怪的问题。在创建到登录方法中的CSV文件内部,它应该写{用户名},{日期},{版本号},但是它将随机的亚洲字符写入文件中。

+2

你会意识到,'昏暗的变量= something'是不正确的语法在VBScript中,你不能'Dim'并在同一行分配,除非你使用这个小骗子'昏暗变量:变量= something'。你在代码中有很多,但是因为你有'On Error Resume Next'集合,它们将被忽略,下一行将尝试运行。另外'OpenTextFile()'文件需要一个物理路径而不是虚拟路径,这样也会出错。就我个人而言,我会评论'On Error Resume Next',直到您的脚本按照您的预期行事。 – Lankymart

+1

您还在混合变量和对象变量赋值,“Set”仅用于指定对象的实例。 VBScript中的字符串不是分类为对象实例,而是简单类型。事实是'预期结束语'实际上可能来自您目前拥有的十几个或更多错误。 – Lankymart

+0

@Lankymart通过物理路径你的意思是我需要有完整路径的例子:“C:\ .. \ .. \ store \ directory.txt”? –

回答

1

On Error Resume Next是导致被隐藏我的错误。这导致我无法修复脚本。

以这种美丽给了我一切,我需要解决的所有问题的信息。