Salut NicoTA,
Pour ma part je passe par Robocopy (Copier l’exécutable dans C:\Windows\System32).
Voici deux scripts qui te permettront de créer une sauvegarde miroir. A la fin de la sauvegarde, tu recevras un email retraçant les erreurs de copies, le succès de la sauvegarde, les problèmes de droits, une arborescence trop importante, …
Le 1er code est un fichier .bat qui va créer la sauvegarde :
:: Intitulé de la sauvegarde)
::_____________________________________________________________
SET LOG="chemin du log\log.txt (chemin local du serveur, Ex : D:)"
SET SOURCE="Chemin UNC Source"
SET DEST="Chemin UNC Destination"
c:
robocopy %SOURCE% %DEST% /E /Z /SEC /MIR /LOG:%LOG% /NP /R:1 /W:2
cscript "Chemin du code vbs\code.vbs"
del "Chemin du log\*.txt" ==> permettra de vider le dossier contenant les logs
Le 2ème code est un fichier .vbs qui enverra un mail après la sauvegarde :
'robocopy_checker.vbs
Dim txtSMTPServer, txtTo, txtFrom, txtSubject, txtBody
Dim txtLog, strValue, iTotal, iPos, strText
txtSMTPServer = "smtp du FAI" 'SMTP server
txtTo = "adresse email 'destinataire'" 'To Address
txtFrom = "adresse email 'émetteur'" 'From Address
txtSubject = "Nom de la sauvegarde" 'Subjet du mail
txtLog = "Chemin du fichier log créé dans le script.bat\log.txt" 'chemin du fichier de log de robocopy
'Récupérer le contenu du fichier
FileContents = GetFile(txtLog)
'-- Cycle thru the log file to find errors --
strText = FileContents
iPos = 1
Do While iPos <= Len(strText)
If InStr(iPos, UCase(strText), "0X00000") > 0 Then
iTotal = iTotal + 1
iPos = InStr(iPos, UCase(strText), "0X00000")_
+ Len("0X00000")
Else
Exit Do
End If
Loop
'-- --
If iTotal > 0 Then
strErrors = 1
Else
strErrors = 0
End If
'Sortie significative en cas d'erreur de copie
If strErrors = 1 Then
txtBody = "La sauvegarde a détecté " & iTotal & " fichiers " &_
"qui n'ont pas pu être sauvegardés. Voir le fichier log ci-joint. " & vbcrlf & "" &_
"Il est possible que ces fichiers soient liés à une application restée en cours d'exécution."
Else
txtBody = "La sauvegarde ROBOCOPY a réussie. Pas d'erreur trouvée dans le fichier log. " &_
"No errors seem to be present in this robocopy log. See attached file."
End If
'-- Envoie d'Email --
Const cdoSendUsingMethod = _
"http://schemas.microsoft.com/cdo/configuration/sendusing", _
cdoSendUsingPort = 2, _
cdoSMTPServer = _
"http://schemas.microsoft.com/cdo/configuration/smtpserver"
'// Créer les connexions CDO.
Dim iMsg, iConf, Flds
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
With Flds
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServer) = txtSMTPServer
.Update
End With
'// Mettre les propriétés du message.
With iMsg
Set .Configuration = iConf
.To = txtTo
.From = txtFrom
.Subject = txtSubject
.TextBody = txtBody
End With
if txtlog <> "" then iMsg.AddAttachment txtLog
'// Send the message.
iMsg.Send ' send the message.
'-- Fonction de lecture du fichier --
function GetFile(txtLog)
If txtLog<>"" Then
Dim FS, FileStream
Set FS = CreateObject("Scripting.FileSystemObject")
on error resume Next
Set FileStream = FS.OpenTextFile(txtLog)
GetFile = FileStream.ReadAll
End If
End Function
J’envoie le mail depuis un SMTP “privé”; si tu as des soucis pour la configuration du VBS au cas où tu voudrais passer par un SMTP "Public genre GMail, fais moi signe.
Edité le 15/12/2011 à 10:01