2

Active Directory で使用するエンド ユーザー ライセンス契約の同意を表示およびログに記録するためのスクリプトを作成しています。これは .hta ファイルに書き込まれ、ほとんどの部分で 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

何を変更するように求めているのかわかりません。

完全なファイルはここにあります

'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 か月間取り組んでいます。

編集: ほとんどの問題は修正されましたが、以前は表示されなかった非常に奇妙な問題に遭遇しました。Logon メソッドに作成された CSV ファイル内では、{username},{date},{version number} を書き込むことになっていますが、代わりにランダムなアジア文字をファイルに書き込みます。

4

1 に答える 1

1

On Error Resume Nextエラーが隠されていました。これにより、スクリプトを修正できなくなりました。

それを取り除くことで、すべての問題を解決するために必要なすべての情報が得られました。

于 2016-01-29T11:11:31.167 に答える