tetard_is_pa
Messages postés5Date d'inscriptionmercredi 20 juillet 2005StatutMembreDernière intervention10 septembre 2008
-
8 sept. 2008 à 20:58
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 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")
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 ^^
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 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")
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 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")
tetard_is_pa
Messages postés5Date d'inscriptionmercredi 20 juillet 2005StatutMembreDernière intervention10 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
tetard_is_pa
Messages postés5Date d'inscriptionmercredi 20 juillet 2005StatutMembreDernière intervention10 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é. :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 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
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 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")
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 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