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文件內部,它應該寫{用戶名},{日期},{版本號},但是它將隨機的亞洲字符寫入文件中。
你會意識到,'昏暗的變量= something'是不正確的語法在VBScript中,你不能'Dim'並在同一行分配,除非你使用這個小騙子'昏暗變量:變量= something'。你在代碼中有很多,但是因爲你有'On Error Resume Next'集合,它們將被忽略,下一行將嘗試運行。另外'OpenTextFile()'文件需要一個物理路徑而不是虛擬路徑,這樣也會出錯。就我個人而言,我會評論'On Error Resume Next',直到您的腳本按照您的預期行事。 – Lankymart
您還在混合變量和對象變量賦值,「Set」僅用於指定對象的實例。 VBScript中的字符串不是分類爲對象實例,而是簡單類型。事實是'預期結束語'實際上可能來自您目前擁有的十幾個或更多錯誤。 – Lankymart
@Lankymart通過物理路徑你的意思是我需要有完整路徑的例子:「C:\ .. \ .. \ store \ directory.txt」? –