Démarrer un fichier de commande depuis VBS
Le
Pierre-Yves

Bonjour,
Voila, il s'agit de faire exécuter un fichier de commande depuis un script
VBS et d'attendre que son exécution soit terminée avant de continuer. Pour
cela j'ai utilisé le code suivant sur un serveur Windows 2003 :
strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT CleanupUsr.cmd"
WshShell.Run strCmd,0,True
Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.
Quelqu'un aurai-t-il une idée ?
Merci d'avance et meilleures salutations
Pierre-Yves
Voila, il s'agit de faire exécuter un fichier de commande depuis un script
VBS et d'attendre que son exécution soit terminée avant de continuer. Pour
cela j'ai utilisé le code suivant sur un serveur Windows 2003 :
strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT CleanupUsr.cmd"
WshShell.Run strCmd,0,True
Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.
Quelqu'un aurai-t-il une idée ?
Merci d'avance et meilleures salutations
Pierre-Yves
Et, avec cette 2ème ligne :
WScript.CreateObject("WScript.Shell").Run strCmd,0,True
c'est pas plus mieux bien ?
@+
--
Michel Claveau
news:
| Bonjour,
Bonjour,
| Voila, il s'agit de faire exécuter un fichier de commande depuis un
| script VBS et d'attendre que son exécution soit terminée avant de
| continuer. Pour cela j'ai utilisé le code suivant sur un serveur
| Windows 2003 :
|
| strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
| CleanupUsr.cmd" WshShell.Run strCmd,0,True
Nul besoin de faire appel à la commande "Start" sachant que la méthode
"Run" de l'objet "WshShell" permet déjà d'attendre la fin de l'exécution
d'une tâche. Ci-dessous la définition de la méthode "Run" :
Run (Command, [WindowStyle], [WaitOnReturn])
Je vous propose donc la solution suivante :
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 0, True
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Merci pour votre réponse rapide.
J'avais bien défini plus haut dans mon code : Set WshShell=
Wscript.CreateObject("Wscript.Shell").
J'ai cependant utilisé les commandes proposées, mais le résultat est
identique avec toutefois une amélioration : plus de message d'erreur de VBS,
mais le fichier de commande ne s'exécute toujours pas et le script continue
simplement à la ligne suivante.
En complément d'information, mon script est démarré par le gestionnaire de
tâche, mais il donne les mêmes résultats si je le démarre manuellement.
Alors, si vous avec une autre idée, je suis preneur.
Meilleure salutations
Pierre-Yves
"Méta-MCI (MVP)" de news: 48caef19$0$897$
Merci pour votre réponse rapide.
J'ai bien essayé votre proposition, mais sans succès (voir aussi ma réponse
à Michel, Méta-MCI)
Alors si vous avec une autre idée, je suis preneur.
Meilleure salutations
Pierre-Yves
"Gilles LAURENT [MVP]"
Bonjour Pierre-Yves,
Pourriez-vous me transmettre le script batch par voie de messagerie ? Cela
me permettra de réaliser quelques tests "Live" !
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Pierre-Yves a écrit :
Si par "(j'ai l'impression qu'il ne se passe rien)" tu veux dire que
tu ne vois rien il suffit de changer le 0 en une autre valeur qui montre
la fenêtre de commande, par exemple :
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 3, True
PS:Et pour être sur que l'attente se fait bien, il peut être inséré une
pause dans le fichier batch (CleanupUsr.cmd).
J'ai suivi tes propositions (paramètre 3 + pause dans le batch), mais
toujours sans obtenir les résultats voulus: aucune fenêtre ne s'ouvre, ou
alors c'est très furtif, et aucune trace de la du batch censé être en pause
(à mon avis il n'est pas exécuté).
Je me pose donc la question si cette methode fonctionne vraiement ?
Est-ce que quelqu'un l'a déjà utilisée pratiquement ?
Merci et cordiales salutations
Pierre-Yves
"Michel__D" news:
Alors oui la méthode run de l'objet "WScript.Shell" fonctionne, maintenant
ton problème est un problème de débugage donc il y a plusieurs façons de
faire (à toi de trouver la tienne), tu peux par exemple mettre des msgbox
aprés chaque ligne du script que tu auras developpé :
' Créer l'objet "WScript.Shell"
Set oShell = CreateObject("WScript.Shell")
msgbox "Test1 Ok"
' Remplacer la variable %COMSPEC% par sa valeur réelle
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
iRet = oShell.Run strCmd, 3, True
msgbox "Test2 Ok" & vbcrlf & iRet
Ps:Tu peux aussi utiliser un utilitaire qui t'indique les process en cours
de fonctionnement.
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
Pierre-Yves a écrit :
' Créer l'objet "WScript.Shell"
Set oShell = CreateObject("WScript.Shell")
msgbox "Test1 Ok"
' Remplacer la variable %COMSPEC% par sa valeur réelle
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
iRet = oShell.Run(strCmd,3,True)
msgbox "Test2 Ok" & vbcrlf & iRet
Michel__D a écrit :