2016-01-25 3 views
2

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.

+2

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

+1

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

+0

@Lankymart Par chemin physique voulez-vous dire que j'ai besoin de l'exemple de chemin complet: "C: \ .. \ .. \ store \ directory.txt"? –

Répondre

1

On Error Resume Next provoquait la fermeture de mes erreurs. Cela causait mon incapacité à réparer le script. Enlever cela m'a donné toutes les informations dont j'avais besoin pour résoudre tous les problèmes.