Continuer a executer le script même si une condition est fausse

Résolu
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 octobre 2017 - 19 nov. 2009 à 09:11
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 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.


http://pc-system.fr

8 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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é.

Calade
3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
19 nov. 2009 à 09:29
Bonjour,

Après ton select, tu itères à travers tous les objets de la collection. Ton fichier n'étant pas trouvé, tu ne lanceras donc pas le 3ème script.

Ne peux-tu pas le sortir de la boucle.

Petit Conseil: Prends-soin d'indenter ton code, dans ce cas présent tu aurais tout de suite vu où se situait le problème.


Calade
0
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 octobre 2017
19 nov. 2009 à 09:32
salut, merci de ta réponse rapide, mais je suis débutant, je ne comprends pas ceci:

tu itères à travers tous les objets de la collection

et ceci: indenter


merci d'avance
0
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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.

Calade
0
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 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.

encore merci pour tout. Cordialement
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.
0
cs_zatox Messages postés 79 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 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.

mais j'ai utilisé le IF que m'a recommandé calade


A+ et encore merci a tous les 2
0
Rejoignez-nous