Continuer a executer le script même si une condition est fausse [Résolu]

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

8 réponses

Répondre au sujet
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 19 nov. 2009 à 09:52
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Calade
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 19 nov. 2009 à 09:29
0
Utile
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
Commenter la réponse de Calade
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 19 nov. 2009 à 09:32
0
Utile
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
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 20 nov. 2009 à 07:52
0
Utile
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
Commenter la réponse de cs_zatox
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 20 nov. 2009 à 08:00
0
Utile
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
Commenter la réponse de Calade
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 20 nov. 2009 à 08:03
0
Utile
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
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 20 nov. 2009 à 13:23
0
Utile
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.
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 21 nov. 2009 à 13:08
0
Utile
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
Commenter la réponse de cs_zatox

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.