Finalisation d'un script

Résolu
tetard_is_pa Messages postés 5 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 10 septembre 2008 - 8 sept. 2008 à 20:58
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 - 11 sept. 2008 à 04:24
bon bah je nage complètement, j'ai beau comprendre la logique du If ... Then avec Else ou Case je n'arrive à rien (vivement les cours et la prog sur ti-82 est plus facile xD).

voilà en gros ce qu'il faudrait si une âme charitable se montre :

1ere étape :

le script doit checker un fichier à un endroit particulier, il compare ce fichier par rapport à un autre fichier sur le serveur.

- SI les fichiers sont identiques ALORS ne rien faire
- SI les fichiers diffèrent ALORS copier le fichier du serveur sur l'endroit particulier du disque dur.
- SI le fichier n'existe pas ALORS copier le fichier du serveur sur l'endroit particulier du disque dur.

2eme étape :

- Le script contrôle si outlook est lancé dans les processus au démarrage du pc (ça j'ai réussi à trouver comment faire)

- SI outlook est dans le processus ALORS on coupe le processus et on le redemarre à la fin du script



ce qui donne ça :

'ici on tue le processus d'outlook si il est lancé au démarrage
'------------------------------------------------------------------------------------

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList objWMIService.ExecQuery ("Select * from Win32_Process Where Name 'Outlook.exe'")

For Each objProcess in colProcessList
objProcess.Terminate()
Next

'execution d'oulook  si le processus à été tué au début par le script
'------------------------------------------------------------------------

 Dim O_Shell

  Set O_Shell = CreateObject("WScript.Shell")
O_Shell.Run("outlook.exe")

End Sub/quote

Donc là, le "si" dans mon commentaire n'est pas à prendre en compte puisque quoi qu'il se passe, je n'ai pas fais de boucle avec un Dim pour définir quoi que ce soit, donc le script relance toujours outlook.

- SI outlook n'était pas dans le processus au début du script ALORS ne pas lancer l'application

merci de l'aide qui sera apportée, j'en peux plus ^^

9 réponses

radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
10 sept. 2008 à 01:53
une petite erreur s'est glissée.. voici  la correction

'********  Déclaration
strComputer = "."
dim outlook_actif

Dim OFS, FichierReference , FichierSource

Set OFS = CreateObject("Scripting.FileSystemObject")

Set FichierSource = OFS.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")
Set FichierReference = OFS.GetFile("C:\Temp\msjr.bmp")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel= impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList objWMIService.ExecQuery ("Select * from Win32_Process Where Name 'Outlook.exe'")

'vérifie si Outlook est dans les process

'si oui, on l'arrête

outlook_actif=false

For Each objProcess in colProcessList
outlook_actif = true
objProcess.Terminate()
Next

'Si le fichier existe, 
If  (OFS.FileExists("C:\Temp\msjr.bmp")) Then
'on compare s'ils sont différents en taille et en dernière date d'écriture
'si oui, il faut copier le fichier source
if
FichierReference.size <> FichierSource.size OR
FichierReference.DateLastModified <>
FichierSource.DateLastModified then
FichierSource.Copy "C:\Temp\msjr.bmp", True
end if
else     ' si le fichier n'existe on le copie
FichierSource.Copy "C:\Temp\msjr.bmp"
end if

'si outlook était démarré au début de ce script on le repart

if outlook_actif then
Dim O_Shell

  Set O_Shell = CreateObject("WScript.Shell")
O_Shell.Run("outlook.exe")

end if
3
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
9 sept. 2008 à 03:43
salut

voici la partie pour outlook

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList objWMIService.ExecQuery ("Select * from Win32_Process Where Name 'Outlook.exe'")

dim outlook_actif

outlook_actif=false

For Each objProcess in colProcessList
outlook_actif = true
objProcess.Terminate()
Next

if outlook_actif then

Dim O_Shell

  Set O_Shell = CreateObject("WScript.Shell")
O_Shell.Run("outlook.exe")


end if

avec ceci, la partie outlook devrait fonctionner
0
tetard_is_pa Messages postés 5 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 10 septembre 2008
9 sept. 2008 à 07:46
ah merci pour outlook car je pense avoir réussi pour le check de fichier dis moi si ca te semble correct :

'Création des variables pour le check de fichier

Dim OFS, FichierReference ,OFSource, FichierSource

'1 je crée la référence du fichier

Set OFS = CreateObject("Scripting.FileSystemObject")
Set OFSource = CreateObject("Scripting.FileSystemObject")

'2 je vais obtenir le fichier msjr.bmp qui est dans le répertoire définit

Set FichierReference = OFS.GetFile("C:\Documents and Settings\Administrateur\Bureau\test\msjr.bmp")
Set FichierSource = OFS.GetFile("C:\Documents and Settings\Administrateur\Bureau\Signatures\msjr.bmp")

'debut de la comparaison des fichiers

'1 si les fichiers sont égaux alors on ne copie rien

If FichierReference = FichierSource Then
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.GetFile("C:\Documents and Settings\Administrateur\Bureau\Signatures\msjr.bmp")
MonFic.Copy "C:\Documents and Settings\Administrateur\Bureau\test\msjr.bmp", false

'2 si le fichier reference est différent que le fichier source alors on copie le fichier source

Elseif FichierReference <> FichierSource then
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.GetFile("C:\Documents and Settings\Administrateur\Bureau\Signatures\msjr.bmp")
MonFic.Copy "C:\Documents and Settings\Administrateur\Bureau\test\msjr.bmp", True

End if
0
tetard_is_pa Messages postés 5 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 10 septembre 2008
9 sept. 2008 à 09:54
Bon j'ai rajouté une variable pour voir si le script marchait et ce n'est pas le cas,  est-ce que quelqu'un pourrait me dire quoi modifier svp ?

'Création des variables pour le check de fichier

Dim OFS, FichierReference ,OFSource, FichierSource, OFSfichier

' je crée la référence du fichier
Set OFSfichier = CreateObject("Scripting.FileSystemObject")
'Si le fichier existe abandonne.
If (OFSfichier.FileExists("C:\Temp\msjr.bmp")) Then
'Si le fichier n'existe pas il va copier le ficher
ElseIf not (OFSfichier.FileExists("C:\Temp\msjr.bmp")) Then

Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")
MonFic.Copy "C:\Temp\msjr.bmp"

'---------------------------------
'je crée la référence du fichier

Set OFS = CreateObject("Scripting.FileSystemObject")
Set OFSource = CreateObject("Scripting.FileSystemObject")

'je vais obtenir le fichier msjr.bmp qui est dans le répertoire définit

Set FichierReference = OFS.GetFile("C:\Temp\msjr.bmp")
Set FichierSource = OFS.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")

'debut de la comparaison des fichiers

'si les fichiers sont égaux alors on ne copie rien

If FichierReference = FichierSource Then
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")
MonFic.Copy "C:\Temp\msjr.bmp", false

'2 si le fichier reference est différent que le fichier source alors on copie le fichier source

Elseif FichierReference <> FichierSource then
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")
MonFic.Copy "C:\Temp\msjr.bmp", True

End if
End if

A partir du moment ou le fichier n'existe pas et qu'il le crée, il ne prend pas en compte le fait de comparer les fichiers et donc ne copie pas le fichier source si le fichier reference à été modifié. :/
0

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

Posez votre question
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
10 sept. 2008 à 01:25
re salut

ce qui me chicote c'est

If FichierReference = FichierSource Then

je doute que ça marche.

aussi tu multiplies les objets qui font la même chose

essaie de comparer plutot les propriétés des objets FichierReference et FichierSource comme ceci

if FichierReference.size <> FichierSource.size OR FichierReference.DateLastModified <> FichierSource.DateLastModified then
FichierSource.Copy "C:\Temp\msjr.bmp", True

End if
0
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
10 sept. 2008 à 01:47
donc voici en gros ce que ca devrait donner
j'ai "épuré" le code de conditions inutiles et diminuer la quantité d'objets

'vérifie si Outlook est dans les process
'si oui, on l'arrête

'********  Déclaration
strComputer = "."
dim outlook_actif

Dim OFS, FichierReference , FichierSource

Set OFS = CreateObject("Scripting.FileSystemObject")

Set FichierSource = FSys.GetFile("\\mairie3\SYSVOL\ville-saintjeandelaruelle.fr\scripts\msjr.bmp")
Set FichierReference = OFS.GetFile("C:\Temp\msjr.bmp")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel= impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList objWMIService.ExecQuery ("Select * from Win32_Process Where Name 'Outlook.exe'")

outlook_actif=false

For Each objProcess in colProcessList
outlook_actif = true
objProcess.Terminate()
Next

'Si le fichier existe, 
If  (OFS.FileExists("C:\Temp\msjr.bmp")) Then
'on compare s'ils sont différents en taille et en dernière date d'écriture
'si oui, il faut copier le fichier source
if FichierReference.size <> FichierSource.size OR
FichierReference.DateLastModified <>
FichierSource.DateLastModified then
FichierSource.Copy "C:\Temp\msjr.bmp", True
end if
else     ' si le fichier n'existe on le copie
FichierSource.Copy "C:\Temp\msjr.bmp"
end if

'si outlook était démarré au début de ce script on le repart

if outlook_actif then
Dim O_Shell

  Set O_Shell = CreateObject("WScript.Shell")
O_Shell.Run("outlook.exe")

end if
0
tetard_is_pa Messages postés 5 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 07:47
je test du boulot et je te dis si ca marche :)
0
tetard_is_pa Messages postés 5 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 19:10
bon bah impec, ca marche, merci à toi ^^
0
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
11 sept. 2008 à 04:24
de rien!  On est là pour s'aider...

mais en revoyant ce code j'ai vu une optimisation possible en changeant une condition.  En ce moment, dès que l'on copie le fichier sur le c:, la propriété DateLastModified prend automatiquement le moment présent.  Donc dès qu'on réexecute le script 1 seconde plus tard, les valeurs de DateLastModified seront différentes encore une fois et le fichier se copiera.  Donc libre à toi de choisir une des 2 méthodes ci-dessous selon ce que tu crois le mieux adapté à la situation.

condition originale
if FichierReference.size <> FichierSource.size OR
FichierReference.DateLastModified <>
FichierSource.DateLastModified then

condition "améliorée"
'copie le fichier seulement si la taille est différente OU si la date de modification du fichier source est plus récente que celle du fichier référence
if FichierReference.size <> FichierSource.size OR
FichierReference.DateLastModified <
FichierSource.DateLastModified then
0
Rejoignez-nous