cs_zatox
Messages postés79Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 octobre 2017
-
19 nov. 2009 à 09:11
cs_zatox
Messages postés79Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 octobre 2017
-
21 nov. 2009 à 13:08
Bonjour à tous, j'ai développé un mini programme qui utilise plusieurs scripts VBS pour fonctionner.
le principe est simple, chaque script VBS sert a rechercher la présence d'un fichier particulier sur l'ordinateur.
Si ce fichier est présent, alors le script inscrit tout le chemin du fichier dans un rapport.
SI le fichier n'est pas présent, alors il n'inscrit rien, et continue son travail (c'est ici que ça se complique).
En effet, mon script fonctionne, tant que les fichiers a rechercher sont présents. mais dès qu'il tombe sur un fichier inexistant , alors naturellement il n'inscrit rien dans le rapport, mais le script s'arrete tout simplement de fonctionner.
voici mon code pour mieux comprendre:
check1.vbs
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
SET Rapport = ObjFSO.OpenTextFile("rapport.txt",8,TRUE,0)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where FileName 'wort' AND Extension 'exe'")
For Each objFile in colFiles
Rapport.writeline objFile.Name
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check2.vbs""")
Next
check2.vbs
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
SET Rapport = ObjFSO.OpenTextFile("rapport.txt",8,TRUE,0)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where FileName 'test' AND Extension 'exe'")
For Each objFile in colFiles
Rapport.writeline objFile.Name
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check3.vbs""")
Next
check3.vbs
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
SET Rapport = ObjFSO.OpenTextFile("rapport.txt",8,TRUE,0)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where FileName 'virus' AND Extension 'exe'")
For Each objFile in colFiles
Rapport.writeline objFile.Name
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check4.vbs""")
Next
si seuls les 2 fichiers wort.exe et virus.exe sont présents sur mon ordinateur, j'aimerais que dans le rapport on puisse voir:
C:\wort.exe
C:\WIONDOWS\`virus.exe
le problème, c'est qu'entre ces 2 scripts de recherche, il y a celui concernant test.exe.
Ce fichier n'étant pas présent, le script check3.vbs ne sera pas lancé, j'en conclut donc que le check2.vbs cesse de fonctionner dès qu'il rencontre un fichier inexistant.
pouvez vous m'aider a faire en sorte, que même si un script rencontre un fichier inexstant sur l'ordinateur, alors il continnue son travail.
J'espère avoir été clair dans mes explication. Je vous remercie d'avance.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 19 nov. 2009 à 09:52
Itérer signifie passer en revue tous les items de ta collection. En gros pour tous les fichiers trouvés dans le SELECT, tu accomplis telle action. Dans ton cas, comme un seul fichier ne peut correspondre, plutôt qu'une boucle, fais un IF et exclu l'exécution du 3ème script.
Quant à l'indentation, plutôt qu'un long discours...
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
SET Rapport = ObjFSO.OpenTextFile("rapport.txt",8,TRUE,0)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where FileName 'test' AND Extension 'exe'")
For Each objFile in colFiles
' A remplacer par un IF ENDIF
Rapport.writeline objFile.Name
Next
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check3.vbs""")
Je n'ai pas mis le code du IF car je ne connais pas structure qui t'es renvoyé.
cs_zatox
Messages postés79Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 octobre 2017 20 nov. 2009 à 07:52
salut, et merci a toi pour les informations,
ici tu me donnes une méthode pour empecher l'execution du 3eme script dans le cas ou une condition serait fausse.Le problème est que je veux que ce 3 eme script s'execute .
je pense que ta métode reste cependant la bonne, avecl'utilisation d'un IF
mais je suis débutant, et je ne comprends pas bien comment procéder.
après ma ligne
("Select * from CIM_DataFile where FileName 'test' AND Extension 'exe'")
j'ai actuellement les lignes
For Each objFile in colFiles
Rapport.writeline objFile.Name
qui permettent d'indiquer dans le rapport les noms des fichiers trouvés.
et me beug se situe ici, si le fichier n'est pas présent, alors le script s'arrete de tourner ici et n'execute pas les lignes suivantes
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check3.vbs""")
j'ai vu ue tu avait déplacé le next. Mais pourrais tu me montrer comment faire fonctionner la condition IF pour que mon script soit fonctionnel, dans le cas ou le fichier serait présent ou absent.
j'adapterai mon code ensuite, Merci d'avance
Cordialement
PS, si tu as besoin d'autres éléments pour pouvoir remplir le code d IF, je te les donnerai sans problèmes
Vous n’avez pas trouvé la réponse que vous recherchez ?
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 20 nov. 2009 à 08:00
Bonjour,
Je t'ai déjà donné le code:
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
SET Rapport = ObjFSO.OpenTextFile("rapport.txt",8,TRUE,0)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where FileName 'test' AND Extension 'exe'")
IF ...
Rapport.writeline objFile.Name
ENDIF
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check3.vbs""")
Par contre je ne peux pas te donner la condition à tester, seulement la logique de la chose car je n'ai jamais programmé en VBScript.
cs_zatox
Messages postés79Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 octobre 2017 20 nov. 2009 à 08:03
ok, merci je vais essayer de me débrouiller avec ça, si quelqu'un qui passe par ici et qui pourrait me trouver la syntaxe complète, je lui en serait très reconaissant, celà me fera gagner énormément de temps.
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 20 nov. 2009 à 13:23
Salut,
'Cette boucle ci dessous, fais le tour des fichier touvés :
For Each objFile in colFiles' Parcour la liste des fichier
'Pour chacun des fichiers, objFile.Name contiendra le chemin du fichier
Rapport.writeline objFile.Name '<= Inscrit le chemin du fichier dans le rapport
'Si tu place l'exécution de ton scipt 3 ici, il s'exécutera chaque fois s'un fichier aura été trouvé
Next
'En revanche, si tu le place à ce niveau, il ne sera exécuté qu'a la fin, lors ce que la boucle ci-dessus,
'aura terminé d'écrire le rapport, dans les deux cas aucun code n'empeche l'exécution du script.
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""XXXXXXX\check\check3.vbs""")
Je pense donc que Calade t'a donné la bonne réponse, si ce n'est pas ce que tu veux faire alors explique le but de ton script.
Ne pas confondre une Boucle (qui répete une action autant de fois que l'on le souhaite selon une condition) et un conditionnel qui exécute une action que si la condition est vrai ou fausse.
++ Mayzz.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
cs_zatox
Messages postés79Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 octobre 2017 21 nov. 2009 à 13:08
salut et merci à tous les deux, finalement j'ai modifié totalement mon code, car même si la solution de calade fonctionne, j'ai préféré n'utiliser qu'un seul script pour rechercher tous les fichiers.