aide script archivage mensuel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

aide script archivage mensuel

#1

Message par ptiseb60 »

Bonjour a tous,

Je me permet de faire a nouveau appel au forum pour une aide au developpement d'un script concernant de l'archivage.
Je fait des sauvegardes de nos serveurs sur un nas synology a l'aide de l'agent veeam,
je transfert toutes les semaines mes sauvegardes (1 complète et 29 incrémentielles par serveurs),
vers un nas externalisé avec active backup for server de synology.


En revanche, j'ai besoin de récupérer Une fois par mois, une copie de la sauvegarde complète de chacun des serveurs
vers le nas externalisé dans un dossier Janvier, fevrier etc... et remplacer la sauvegarde existante si il y en a une
(car elle daterait de l'an passé).

Le problème c'est qu'active backup ne permet pas une planification mensuel, en revanche le synology me permet l’exécution
d'un script sous forme de tache planifiée.

Je pense donc qu'il est possible de solutionner mon problème via un script exécuté en automatique chaque milieu de mois,
le tout étant de respecter ces quelques critères :
- récupérer le fichier .vbk de chaque serveur (stocké dans des dossiers différents)
- vérifier le mois en cours
- copier le fichier dans le dossier du serveur, sous dossier du mois en cours et remplacer le fichier existant.

Merci d'avance pour vos retour.
Ptiseb
Utilisateur 3309 supprimé
Status : Hors ligne

Re: aide script archivage mensuel

#2

Message par Utilisateur 3309 supprimé »

Bonjour,
moi je n'utiliserai pas autoit pour ce genre de chose. si je comprends bien, on ne fait que de la copie de fichier a un moment donné, donc un batch exécuté dans une tache planifiée suffit.
12 batchs (1 par mois a cause du changement de chemin : ../janvier/fichier.vbk) qui copie un fichier d'un dossier X vers un dossier Y. Et ensuite une tache planifiée par batch.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: aide script archivage mensuel

#3

Message par Tlem »

Je suis d'accord pour le batch, par contre 12 Batchs, c'est un peu rude. :shock:
On peu tout faire dans un seul ...

Code : Tout sélectionner

@Echo Off
Cls

If %date:~3,2%==01 Set Mois=Janvier
If %date:~3,2%==02 Set Mois=Fevrier
If %date:~3,2%==03 Set Mois=Mars
If %date:~3,2%==04 Set Mois=Avril
If %date:~3,2%==05 Set Mois=Mai
If %date:~3,2%==06 Set Mois=Juin
If %date:~3,2%==07 Set Mois=Juillet
If %date:~3,2%==08 Set Mois=Aout
If %date:~3,2%==09 Set Mois=Septembre
If %date:~3,2%==10 Set Mois=Octobre
If %date:~3,2%==11 Set Mois=Novembre
If %date:~3,2%==12 Set Mois=Decembre

Echo Date Numerique = %date:~3,2%
Echo Nous sommes au mois de %Mois%
Echo.
Pause
Edit :
Voici un squelette de batch qui ferait l'affaire (Il faut évidement supprimer le Echo devant Xcopy qui n'est là que pour montrer ce que ça donne).

Code : Tout sélectionner

@Echo Off
Cls

Set Dst=\\Serveur\Backup\

If %date:~3,2%==01 Set Mois=Janvier
If %date:~3,2%==02 Set Mois=Fevrier
If %date:~3,2%==03 Set Mois=Mars
If %date:~3,2%==04 Set Mois=Avril
If %date:~3,2%==05 Set Mois=Mai
If %date:~3,2%==06 Set Mois=Juin
If %date:~3,2%==07 Set Mois=Juillet
If %date:~3,2%==08 Set Mois=Aout
If %date:~3,2%==09 Set Mois=Septembre
If %date:~3,2%==10 Set Mois=Octobre
If %date:~3,2%==11 Set Mois=Novembre
If %date:~3,2%==12 Set Mois=Decembre

FOR /D %%I IN ("\\PC1\dossier\PC 1.vbk","\\PC2\dossier\PC 2.vbk","\\PC3\dossier\PC 3.vbk","\\PC4\dossier\PC 4.vbk","\\PC5\dossier\PC 5.vbk") DO (
	Echo Xcopy %%I "%Dst%%Mois%\" /Y
)
Pause
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Utilisateur 3309 supprimé
Status : Hors ligne

Re: aide script archivage mensuel

#4

Message par Utilisateur 3309 supprimé »

Effectivement quand on est un PRO du batch on y arrive avec 1 seul script :D :D
j'ai souvent tendance à oublier que les batch ne se limitent pas traiter des simples commandes à la suite et qu'on peut créer des variables et des conditions. :wink:
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: aide script archivage mensuel

#5

Message par ptiseb60 »

Merci pour vos réponses, c'est un peu ce que j'ai fini pas faire mais la tache planifié lance un exe autoit.
Je le poste pour ceux que ça pourrait intéressé, j'ai ajouté une partie écriture dans un fichier log mais le script n’écrit pas "fin d’exécution" a la fin je ne comprend pas trop pourquoi a vrai dire, d'un autre coté quand je regarde mes taches planifiée la tache tourne depuis 3 jours sans jamais s’arrêter visiblement.. y a donc un truc qui va pas ("perspicace" certains diraient)...

voici mon code :

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=archivage_sauvegarde_serveurs_mensuelle.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <File.au3>




;-------------------------ecriture de la date dans le fichier log
$TIME = @MDAY &"/"& @MON &"/"& @YEAR &" - "& @HOUR &"H"& @MIN &" "& @SEC &" sec"
_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log","execution de la tache planifiée le : " & $TIME & @CRLF)






;----------définition du chemin a scanner et de sa destination

$sFilePath1="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur1\Backup Job serveur1"
$sDestPath1="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur1"

$sFilePath2="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur2\Backup Job serveur2"
$sDestPath2="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur2"

$sFilePath3="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur3\Backup Job serveur3"
$sDestPath3="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur3"

$sFilePath4="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur4\Backup Job serveur4"
$sDestPath4="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur4"

$sFilePath5="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur5\Backup Job serveur5"
$sDestPath5="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur5"

$sFilePath6="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur6\Backup Job serveur6"
$sDestPath6="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur6"

$sFilePath7="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur7\Backup Job serveur7"
$sDestPath7="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur7"

$sFilePath8="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur8\Backup Job serveur8"
$sDestPath8="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur8"



;----------création des tableaux contenants les fichiers présents
$aArray1 = _FileListToArray($sFilePath1, "*.vbk", $FLTAR_FILES,True)
$aArray2 = _FileListToArray($sFilePath2, "*.vbk", $FLTAR_FILES,True)
$aArray3 = _FileListToArray($sFilePath3, "*.vbk", $FLTAR_FILES,True)
$aArray4 = _FileListToArray($sFilePath4, "*.vbk", $FLTAR_FILES,True)
$aArray5 = _FileListToArray($sFilePath5, "*.vbk", $FLTAR_FILES,True)
$aArray6 = _FileListToArray($sFilePath6, "*.vbk", $FLTAR_FILES,True)
$aArray7 = _FileListToArray($sFilePath7, "*.vbk", $FLTAR_FILES,True)
$aArray8 = _FileListToArray($sFilePath8, "*.vbk", $FLTAR_FILES,True)







func serveur1()
;--------boucle pour serveur1--------------------------------------------------------------------------------------------------
	For $a = 1 To $aArray1[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime1 = FileGetTime ($aArray1[$a],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath1 & "\" & $ArrayTime1[1]) Then DirCreate ( $sDestPath1 & "\" & $ArrayTime1[1])
			FileCopy($aArray1[$a],$sDestPath1 & "\" & $ArrayTime1[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath1 & "\" & $ArrayTime1[1] & @CRLF)
	Next
;--------------------fin boucle serveur1---------------------------------------------------------------------------------
EndFunc




func serveur2()
;--------boucle pour serveur2--------------------------------------------------------------------------------------------------
	For $b = 1 To $aArray2[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime2 = FileGetTime ($aArray2[$b],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath2 & "\" & $ArrayTime2[1]) Then DirCreate ( $sDestPath2 & "\" & $ArrayTime2[1])
			FileCopy($aArray2[$b],$sDestPath2 & "\" & $ArrayTime2[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath2 & "\" & $ArrayTime2[1] & @CRLF)

	Next
;--------------------fin boucle serveur2---------------------------------------------------------------------------------
EndFunc




func serveur3()
;--------boucle pour serveur3--------------------------------------------------------------------------------------------------
	For $c = 1 To $aArray3[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime3 = FileGetTime ($aArray3[$c],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath3 & "\" & $ArrayTime3[1]) Then DirCreate ( $sDestPath3 & "\" & $ArrayTime3[1])
			FileCopy($aArray3[$c],$sDestPath3 & "\" & $ArrayTime3[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath3 & "\" & $ArrayTime3[1] & @CRLF)

	Next
;--------------------fin boucle serveur3---------------------------------------------------------------------------------
EndFunc



func serveur4()
;--------boucle pour serveur4--------------------------------------------------------------------------------------------------
	For $d = 1 To $aArray4[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime4 = FileGetTime ($aArray4[$d],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath4 & "\" & $ArrayTime4[1]) Then DirCreate ( $sDestPath4 & "\" & $ArrayTime4[1])
			FileCopy($aArray4[$d],$sDestPath4 & "\" & $ArrayTime4[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath4 & "\" & $ArrayTime4[1] & @CRLF)

	Next
;--------------------fin boucle serveur4---------------------------------------------------------------------------------
EndFunc


func serveur5()
;--------boucle pour serveur5--------------------------------------------------------------------------------------------------
	For $e = 1 To $aArray5[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime5 = FileGetTime ($aArray5[$e],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath5 & "\" & $ArrayTime5[1]) Then DirCreate ( $sDestPath5 & "\" & $ArrayTime5[1])
			FileCopy($aArray5[$e],$sDestPath5 & "\" & $ArrayTime5[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath5 & "\" & $ArrayTime5[1] & @CRLF)

	Next
;--------------------fin boucle serveur5---------------------------------------------------------------------------------
EndFunc




func serveur6()
;--------boucle pour serveur6--------------------------------------------------------------------------------------------------
	For $f = 1 To $aArray6[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime6 = FileGetTime ($aArray6[$f],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath6 & "\" & $ArrayTime6[1]) Then DirCreate ( $sDestPath6 & "\" & $ArrayTime6[1])
			FileCopy($aArray6[$f],$sDestPath6 & "\" & $ArrayTime6[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath6 & "\" & $ArrayTime6[1] & @CRLF)

	Next
;--------------------fin boucle serveur6---------------------------------------------------------------------------------
EndFunc




func serveur7()
;--------boucle pour serveur7--------------------------------------------------------------------------------------------------
	For $g = 1 To $aArray7[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime7 = FileGetTime ($aArray7[$g],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath7 & "\" & $ArrayTime7[1]) Then DirCreate ( $sDestPath7 & "\" & $ArrayTime7[1])
			FileCopy($aArray7[$g],$sDestPath7 & "\" & $ArrayTime7[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath7 & "\" & $ArrayTime7[1] & @CRLF)

	Next
;--------------------fin boucle serveur7---------------------------------------------------------------------------------
EndFunc

Func serveur8()
;--------boucle pour serveur8--------------------------------------------------------------------------------------------------
	For $h = 1 To $aArray8[0]
;-------------------on recupère la date de modification des fichiers
		$ArrayTime8 = FileGetTime ($aArray8[$h],$FT_MODIFIED )

;------------si aucun sous dossier ne correspond a la l'année de modification du fichier on le crée puis on déplace le fichier

			If Not FileExists($sDestPath8 & "\" & $ArrayTime8[1]) Then DirCreate ( $sDestPath8 & "\" & $ArrayTime8[1])
			FileCopy($aArray8[$h],$sDestPath8 & "\" & $ArrayTime8[1],1)
			_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", $sDestPath8 & "\" & $ArrayTime8[1] & @CRLF)

	Next
;--------------------fin boucle serveur8---------------------------------------------------------------------------------
EndFunc




;---------------appel des fonctions--------------------

serveur1()
serveur2()
serveur3()
serveur4()
serveur5()
serveur6()
serveur7()
serveur8()

_FileWriteLog("\\serveur2\d\installations\LOG\archivage_sauvegarde_mensuelle_complete.log", "fin d'execution" & @CRLF)
idéalement j'aimerais rajouter un envoi du log par mail (cette fonction est bloqué dans les taches planifiée sur serveur 2012 R2)
J'ai pas encore trop cherché de ce coté
Utilisateur 3309 supprimé
Status : Hors ligne

Re: aide script archivage mensuel

#6

Message par Utilisateur 3309 supprimé »

Pour l'envoi d'un mail, si tu utilises la version "batch" proposée par tlem, tu peux utiliser en ligne de commande sendmail.exe à la fin du script:
http://caspian.dotconf.net/menu/Software/SendEmail/
il y a 2 versions, avec et sans support TLS. Donc autant prendre la version "avec", pour être tranquille.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: aide script archivage mensuel

#7

Message par Tlem »

Puisqu'un script AutoIt est requis ...

Voici une version tel que je la ferait pour moi (Il y a même l'envoi du mail que l'on peux activer ou pas ^^).
J'utilise 2 fichiers afin de ne pas avoir à recompiler le script en cas de changement sur la config des serveurs ou du mail ...

J'ai pas pu tester la copie des fichiers, mais le reste fonctionne.
Il est très certainement possible de l'améliorer encore. Je ne doute pas que les lecteurs de ce sujet feront part de leur avis.

Le code pour l'envoi de mail à été repris tel quel d'un sujet du forum, car je n'ai pas réussit à faire fonctionner _INetSmtpMail() !

archivage_sauvegarde_serveurs_mensuelle.au3

Code : Tout sélectionner

#AutoIt3Wrapper_Outfile=archivage_sauvegarde_serveurs_mensuelle.exe

#include <File.au3>
#include <Inet.au3>

Global $sFilePath, $sDestPath
Global $sMonthFr = GetMonNameFr(@MON) ; Mois en litéral Français
Global $fSRVList = @ScriptDir & "\SRVList.ini" ; Chemin du fichier de config
Global $sLogFile = IniRead($fSRVList, "LOG_FILE", "LOGFILE", "") & "_" & @YEAR & @MON & ".log"  ; Fichier LOG
Global $aSRVList = IniReadSectionNames($fSRVList) ; Tableau des sections

; Info pour mail
Global $SendMail   = IniRead($fSRVList, "MAIL_CFG", "SendMail", 0)
Global $ToAddress   = IniRead($fSRVList, "MAIL_CFG", "ToAddress", "")
Global $FromAddress = IniRead($fSRVList, "MAIL_CFG", "FromAddress", "")
Global $SmtpServer  = IniRead($fSRVList, "MAIL_CFG", "SmtpServer", "")
Global $Username    = IniRead($fSRVList, "MAIL_CFG", "Username", "")
Global $Password    = IniRead($fSRVList, "MAIL_CFG", "Password", "")
Global $AttachFiles = IniRead($fSRVList, "MAIL_CFG", "AttachFiles", $sLogFile)
Global $FromName    = IniRead($fSRVList, "MAIL_CFG", "FromName", "")
Global $Subject     = IniRead($fSRVList, "MAIL_CFG", "Subject", "") & " - " & @MDAY & "-" & @MON & "-" & @YEAR
Global $Body        = IniRead($fSRVList, "MAIL_CFG", "Body", "")
Global $CcAddress   = IniRead($fSRVList, "MAIL_CFG", "CcAddress", "")
Global $BccAddress  = IniRead($fSRVList, "MAIL_CFG", "BccAddress", "")
Global $Importance  = IniRead($fSRVList, "MAIL_CFG", "Importance", "0")
Global $IPPort      = IniRead($fSRVList, "MAIL_CFG", "IPPort", "25")
Global $ssl         = IniRead($fSRVList, "MAIL_CFG", "ssl", "0")

_FileWriteLog($sLogFile, "Exécution de la tâche planifiée de sauvegarde complète.")
; Boucle de traitement du tableau des sections
For $i = 1 To UBound($aSRVList) - 1
	If $aSRVList[$i] = "LOG_FILE" Then ContinueLoop ; Passe la section [LOG_FILE]
	If $aSRVList[$i] = "MAIL_CFG" Then ContinueLoop ; Passe la section [MAIL_CFG]

	$sFilePath = IniRead($fSRVList, $aSRVList[$i], "FilePath", "") ; Récup du chemin source
	$sDestPath = IniRead($fSRVList, $aSRVList[$i], "DestPath", "") ; Récup du chemin destination

	; On vérifie que la source existe
	If Not FileExists($sFilePath) Then
		_FileWriteLog($sLogFile, "*** Erreur la source de " & $aSRVList[$i] & " n'existe pas !")
		ContinueLoop
	EndIf

	; Si le dossier de destination existe et contient des fichiers .vbk, on les supprime
	If FileExists($sDestPath & "\$sMon\*.vbk") Then FileDelete($sDestPath & "\$sMon\*.vbk")

	_FileWriteLog($sLogFile, "Début de la sauvegarde de " & $aSRVList[$i])
	; On copie les nouveaux fichiers de sauvegarde en créant le dossier si nécessaire
	If FileCopy($sFilePath & "\*.vbk", $sDestPath & "\" & $sMonthFr & "\", 9) Then
		_FileWriteLog($sLogFile, "Fin de la sauvegarde de " & $aSRVList[$i])
	Else
		_FileWriteLog($sLogFile, "*** Erreur lors de la sauvegarde de " & $aSRVList[$i])
	EndIf
	_FileWriteLog($sLogFile, "------------------------------------------------------")
	_FileWriteLog($sLogFile, "Fin de la sauvegarde de " & $aSRVList[$i])
Next

_FileWriteLog($sLogFile, "Fin de la tâche planifiée de sauvegarde complète." & @CRLF & _
						 "=======================================================================")

; Envoi du Mail si SendMail=1
If $SendMail = 1 Then
	Global $oMyRet[2]
	Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
	$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
	If @error Then Exit 1
EndIf
Exit 0


Func GetMonNameFr($szMN)
	Switch $szMN
		Case 01
			$Mon = "Janvier"
		Case 02
			$Mon = "Fevrier"
		Case 03
			$Mon = "Mars"
		Case 04
			$Mon = "Avril"
		Case 05
			$Mon = "Mai"
		Case 06
			$Mon = "Juin"
		Case 07
			$Mon = "Juillet"
		Case 08
			$Mon = "Aout"
		Case 09
			$Mon = "Septembre"
		Case 10
			$Mon = "Octobre"
		Case 11
			$Mon = "Novembre"
		Case 12
			$Mon = "Decembre"
		Case Else
			$Mon = $szMN
	EndSwitch
	Return $Mon
EndFunc   ;==>GetMonNameFr


Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)

	; Source : forum us

	Global $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Global $i_Error = 0
    Global $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Global $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = __PathFull($S_Files2Attach[$x])
            ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 Then $IPPort = 25
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message

    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf

    $objEmail = ""
EndFunc   ;==>_INetSmtpMailCom



Func MyErrFunc()

	; Source : forum us

    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite( "! " & @ScriptFullPath & " (" & $HexNumber & ")  :==> ### COM Error !" & @CRLF & "! Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)

    Return SetError(1); something to check for when this function returns
EndFunc   ;==>MyErrFunc
Func __PathFull($sRelativePath, $sBasePath = @WorkingDir)

	; Source : forum us

    If Not $sRelativePath Or $sRelativePath = "." Then Return $sBasePath

    ; Normalize slash direction.
    Global $sFullPath = StringReplace($sRelativePath, "/", "\")
    Global Const $sFullPathConst = $sFullPath
    Global $sPath
    Global $bRootOnly = StringLeft($sFullPath, 1) = "\" And StringMid($sFullPath, 2, 1) <> "\"

    If $sBasePath = Default Then $sBasePath = @WorkingDir

    For $i = 1 To 2
        $sPath = StringLeft($sFullPath, 2)
        If $sPath = "\\" Then
            $sFullPath = StringTrimLeft($sFullPath, 2)
            Global $nServerLen = StringInStr($sFullPath, "\") - 1
            $sPath = "\\" & StringLeft($sFullPath, $nServerLen)
            $sFullPath = StringTrimLeft($sFullPath, $nServerLen)
            ExitLoop
        ElseIf StringRight($sPath, 1) = ":" Then
            $sFullPath = StringTrimLeft($sFullPath, 2)
            ExitLoop
        Else
            $sFullPath = $sBasePath & "\" & $sFullPath
        EndIf
    Next

    ; If this happens, we've found a funky path and don't know what to do
    ; except for get out as fast as possible.  We've also screwed up our
    ; variables so we definitely need to quit.
    ; If $i = 3 Then Return ""

    ; A path with a drive but no slash (e.g. C:Path\To\File) has the following
    ; behavior.  If the relative drive is the same as the $BasePath drive then
    ; insert the base path.  If the drives differ then just insert a leading
    ; slash to make the path valid.
    If StringLeft($sFullPath, 1) <> "\" Then
        If StringLeft($sFullPathConst, 2) = StringLeft($sBasePath, 2) Then
            $sFullPath = $sBasePath & "\" & $sFullPath
        Else
            $sFullPath = "\" & $sFullPath
        EndIf
    EndIf

    ; Build an array of the path parts we want to use.
    Global $aTemp = StringSplit($sFullPath, "\")
    Global $aPathParts[$aTemp[0]], $j = 0
    For $i = 2 To $aTemp[0]
        If $aTemp[$i] = ".." Then
            If $j Then $j -= 1
        ElseIf Not ($aTemp[$i] = "" And $i <> $aTemp[0]) And $aTemp[$i] <> "." Then
            $aPathParts[$j] = $aTemp[$i]
            $j += 1
        EndIf
    Next

    ; Here we re-build the path from the parts above.  We skip the
    ; loop if we are only returning the root.
    $sFullPath = $sPath
    If Not $bRootOnly Then
        For $i = 0 To $j - 1
            $sFullPath &= "\" & $aPathParts[$i]
        Next
    Else
        $sFullPath &= $sFullPathConst
        ; If we detect more relative parts, remove them by calling ourself recursively.
        If StringInStr($sFullPath, "..") Then $sFullPath = __PathFull($sFullPath)
    EndIf

    ; Clean up the path.
    Do
        $sFullPath = StringReplace($sFullPath, ".\", "\")
    Until @extended = 0
    Return $sFullPath
EndFunc   ;==>_PathFull

SRVList.ini

Code : Tout sélectionner

[LOG_FILE]
LOGFILE="archivage_sauvegarde_mensuelle_complete"

[MAIL_CFG]
SendMail=1
ToAddress="admin@domaine.fr"
FromAddress="2012Server@domaine.fr"
SmtpServer ="smtp.domaine.fr"
Username=
Password=
;AttachFiles=
FromName="Serveur 2012"
Subject="Sauvegarde complète"
Body="Sauvegarde complète des serveurs. Voir fichier LOG joint."
CcAddress=
BccAddress=
Importance=
IPPort=
ssl=

[Serveur_1]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur1\Backup Job serveur1"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur1"

[Serveur_2]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur2\Backup Job serveur2"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur2"

[Serveur_3]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur3\Backup Job serveur3"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur3"

[Serveur_4]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur4\Backup Job serveur4"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur4"

[Serveur_5]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur5\Backup Job serveur5"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur5"

[Serveur_6]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur6\Backup Job serveur6"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur6"

[Serveur_7]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur7\Backup Job serveur7"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur7"

[Serveur_8]
FilePath="\\NAS-SIEGE\SAUVEGARDES_SERVEURS\serveur8\Backup Job serveur8"
DestPath="\\NAS-EXT-1\SAUVEGARDES_SERVEURS\complete_mensuelle\serveur8"

Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre