Vous avez écrit un script pour afficher et consigner l'acceptation d'un contrat de licence d'utilisateur final à utiliser sur Active Directory. Il est écrit dans un fichier .hta et utilise VBScript pour la plupart."Fin de l'instruction attendue" dans le fichier VBScript
Je me suis heurté à beaucoup de problèmes que j'ai résolus jusqu'à présent, mais ce dernier m'a dérouté.
Lorsque le fichier est exécuté, il me donne un
"Fin de la déclaration prévue"
erreur pour la ligne 35 du script qui est:
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
Je Je ne sais pas ce que ça me demande de changer.
Le dossier complet peut être trouvé 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
Si vous les gars trouver d'autres erreurs stupides dans le code que je vous en serais reconnaissant de l'aide à ceux aussi, travaille sur ce script pendant environ 3 mois.
EDIT: La plupart des problèmes ont maintenant été corrigés mais j'ai rencontré un problème très étrange qui n'apparaissait pas auparavant. A l'intérieur du fichier CSV créé dans la méthode Logon, il est supposé écrire {nom d'utilisateur}, {date}, {numéro de version} mais à la place il écrit des caractères asiatiques aléatoires dans le fichier.
Vous vous rendez compte que 'Dim variable = quelque chose 'est une syntaxe incorrecte dans VBScript, vous ne pouvez pas' Dim 'et affecter sur la même ligne, sauf si vous utilisez cette petite triche' Dim variable: variable = quelque chose. Vous en avez beaucoup dans le code, mais parce que vous avez défini "On Error Resume Next", ils seront ignorés et la ligne suivante tentera de s'exécuter. Aussi 'OpenTextFile()' fichier a besoin d'un chemin physique pas un virtuel, de sorte que sera également une erreur. Personnellement, je commenterai "On Error Resume Next" jusqu'à ce que le script se comporte comme prévu. – Lankymart
Vous mélangez également des affectations de variable et d'objet, 'Set' est utilisé uniquement pour assigner des instances d'objets. Une chaîne dans VBScript n'est pas classée comme une instance d'objet mais plutôt comme un type simple. Le fait est que 'End of Statement Expected' pourrait provenir d'une douzaine d'erreurs ou plus que vous avez actuellement. – Lankymart
@Lankymart Par chemin physique voulez-vous dire que j'ai besoin de l'exemple de chemin complet: "C: \ .. \ .. \ store \ directory.txt"? –