OVH Cloud OVH Cloud

Fichier Processus

5 réponses
Avatar
DIP
Bonjour,
Je cherche à écrire un script vbs qui me vérifie la présence dans les
processus du fichier "setup.exe" tant qu'il est présent on ne fait rien et
lorsque il a disparue j'écris un fichier log dans c:\temp

Merci pour votre aide
DIP

5 réponses

Avatar
~Jean-Marc~ [MVP]
Salutations *DIP* , tu nous disais :
Bonjour,
Je cherche à écrire un script vbs qui me vérifie la présence dans les
processus du fichier "setup.exe" tant qu'il est présent on ne fait
rien et lorsque il a disparue j'écris un fichier log dans c:temp


Vite fait et non testé :


Option Explicit

Dim objWMIService, colProcesses, f, nomfic
Const ForWriting=2
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' ---------- Attendre setup.exe --------------

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!.rootcimv2")
Do
Wscript.sleep 500
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'setup.exe'")
Loop until colProcesses.Count = 0

' ----------------écrire le log ---------------
nomfic="c:tempappli.log"
set f = fso.OpenTextFile(nomfic, ForWriting , true)
f.writeline "Setup fini"
f.close


Je laisse la main à Michel pour la version en BAT/CMD ;-)


@+++

--
~Jean-Marc~ MVP Shell/User Fr
M'écrire : http://msmvps.com/docxp/contact.aspx
- http://docxp.mvps.org - http://msmvps.com/docxp/ -
Aide en DIRECT sur Internet : http://communautes-ms.akro-net.org/

Avatar
Do Re Mi chel La Si Do
Voilà :


@echo off
:: Attend la fin du process, puis écrit dans C:TEMP.LOG
echo Attente...
:TEST
sleepm 500
@for /F "usebackq tokens=1,2" %%i in (`tasklist /FI "IMAGENAME eq setup.exe"
/NH`) do (goto :TEST)
echo Log : 'Setup' terminé le %DATE% à %TIME% >C:TEMP.LOG


Attention, l'utilitaire sleepm.exe n'est pas standard. Il est à télécharger
là :
http://ponx.org/download/CD/DivProgMci/sleepm.exe

Mais il n'est pas indispensable (pour l'aide : sleepm [Entrée]




J'envoie la facture à qui ? En l'absence de devis, je peux faire un
forfait à un million d'euros, prix d'amis, pour les lecteurs de ce
newsgroup.



Michel Claveau
Avatar
Jacques Barathon [MS]
"Do Re Mi chel La Si Do" wrote in message
news:uWG%
Voilà :


@echo off
:: Attend la fin du process, puis écrit dans C:TEMP.LOG
echo Attente...
:TEST
sleepm 500
@for /F "usebackq tokens=1,2" %%i in (`tasklist /FI "IMAGENAME eq
setup.exe" /NH`) do (goto :TEST)
echo Log : 'Setup' terminé le %DATE% à %TIME% >C:TEMP.LOG



J'aime bien. Allez, un petit coup en MSH histoire de dire que c'est fait:

---couper ici---
$p = get-process setup 2> $null
while ($p.processname -ne $null)
{ $p = get-process setup 2> $null }
"Fin setup: {0}" -f $(get-date) > c:temp.log
---couper ici---

Malheureusement, MSH n'a (pour l'instant?) qu'une structure While qui dans
cet exemple m'a contraint à écrire deux fois le test sur la présence du
process: une fois avant d'entrer dans la boucle, puis une 2e fois dans la
boucle. Sans le premier test la boucle se termine immédiatement...

Jacques

Avatar
Do Re Mi chel La Si Do
Pour une fois que le GOTO a un avantage...
Avatar
Jacques Barathon [MS]
"Do Re Mi chel La Si Do" wrote in message
news:%
Pour une fois que le GOTO a un avantage...


En me renseignant un peu, j'ai finalement une solution bien plus rapide en
MSH:

$p = get-process setup 2> $null
$p.WaitForExit()
"Fin setup: {0}" -f $(get-date) > c:temp.log

Si l'on est sûr que le process setup existe au début du script, ou si on
veut récupérer l'ensemble des messages résultant des commandes du script, on
peut se passer de "2> $null" qui n'est là que pour passer à la trappe le
message d'erreur éventuel dans le cas où le process n'existerait pas.

Et pour ceux que ça intéresse, je viens d'apprendre que MSH supporte
également la construction do { instructions } until ( condition ), ajoutée
récemment et encore non documentée si je me réfère à l'aide en ligne.

Jacques