2016-01-25 35 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是導致被隱藏我的錯誤。這導致我無法修復腳本。

以這種美麗給了我一切,我需要解決的所有問題的信息。