Script powershell pour de la sauvegarde

Script powershell pour de la sauvegarde - Stockage - Systèmes & Réseaux Pro

Marsh Posté le 23-11-2010 à 09:28:41    

Bonjour à tous,
 
Je viens poster sur ce forum car aprés avoir passer des heures et des heures sur internet à cherche une réponse je n'ai rien trouver  :(  ! Je vous demande donc votre aide  :)  
 
Dans mon entreprise il y à un script de sauvegarde en cmd qui sert à la sauvegarde des machines virtuelles sur un serveur de fichiers, mais je n'ai aucun moyen de savoir si la sauvegarde s'est bien passée  :(. Mon chef n'ayant pas le temps de le faire m'as confier la tache, soit de créer un script afin de recevoir par mail les informations sur la copie, soit de refaire carrément tout le script avec l'envoi de mails aussi et tout sa par : Powershell !!!
 
Je n'ai jamais fait de Powershell de ma vie, et aprés avoir passer une journée à lire des tutos et tout je ne m'en sors plus ...  
 
Si quelqu'un pourrait m'éclaircir cela serait génial  :D  
 
Merci d'avance !

Reply

Marsh Posté le 23-11-2010 à 09:28:41   

Reply

Marsh Posté le 23-11-2010 à 10:48:18    

Un script pour backuper des VM, okay.
Mais pourquoi powershell vu que c'est pas du windows ? [:wam]


---------------
The only thing necessary for the triumph of evil is for good people to do nothing.
Reply

Marsh Posté le 23-11-2010 à 11:04:15    

CK Ze CaRiBoO a écrit :

Un script pour backuper des VM, okay.
Mais pourquoi powershell vu que c'est pas du windows ? [:wam]


 
Toutes mes machines sont sous 2008 Serveur et quelques unes en 2003 !

Reply

Marsh Posté le 23-11-2010 à 11:07:18    

CK Ze CaRiBoO a écrit :

Un script pour backuper des VM, okay.
Mais pourquoi powershell vu que c'est pas du windows ? [:wam]


Pourquoi celà ne serait pas du windows ? Même si je trouve celà moins bien .... Tu as des serveur de virtualisation microsoft based ... :)
 
mrimcesi : La seule façon de s'assurer qu'un backup en script ce soit vraiment bien passé, c'est de remonter les backup de temps à autres sur un serveur dis de "laboratoire" ... Un serveur en dehors de ton LAN pour pas le perturber.
 
Maintenant pour savoir si el backup s'est bien exécuté (ce qui est différent de la vérification des données) il suffit d'inclure dans ton script une variable contenant l'heure de fin de backup et de te l'envoyer par mail en utilisant ton serveur de messagerie.
 
Il éxiste des petites applications pour envoyer les mails de façon plus ... facile. Comme par exemple MAILsend.

Message cité 1 fois
Message édité par ChaTTon2 le 23-11-2010 à 11:07:54

---------------
Mon feed-back : http://forum.hardware.fr/hfr/Achat [...] 1974_1.htm
Reply

Marsh Posté le 23-11-2010 à 11:34:20    

Ah oué j'avais oublié qu'il y avait hyperv xD


---------------
The only thing necessary for the triumph of evil is for good people to do nothing.
Reply

Marsh Posté le 23-11-2010 à 11:37:23    

ChaTTon2 a écrit :


Pourquoi celà ne serait pas du windows ? Même si je trouve celà moins bien .... Tu as des serveur de virtualisation microsoft based ... :)
 
mrimcesi : La seule façon de s'assurer qu'un backup en script ce soit vraiment bien passé, c'est de remonter les backup de temps à autres sur un serveur dis de "laboratoire" ... Un serveur en dehors de ton LAN pour pas le perturber.
 
Maintenant pour savoir si el backup s'est bien exécuté (ce qui est différent de la vérification des données) il suffit d'inclure dans ton script une variable contenant l'heure de fin de backup et de te l'envoyer par mail en utilisant ton serveur de messagerie.
 
Il éxiste des petites applications pour envoyer les mails de façon plus ... facile. Comme par exemple MAILsend.


 
Merci de la réponse,  
 
Mais je dois passer par du Powershell ! On me l'as imposer ... quitte à refaire les anciens scripts avec Powershell ! C'est la qu'est mon problème :s

Reply

Marsh Posté le 23-11-2010 à 14:17:13    

Et bien tu n'as plus qu'à te palucher les tutos :)
 
Rassures toi il y a énormément de similitudes avec le DOS :)


---------------
Mon feed-back : http://forum.hardware.fr/hfr/Achat [...] 1974_1.htm
Reply

Marsh Posté le 23-11-2010 à 15:29:43    

ChaTTon2 a écrit :

Et bien tu n'as plus qu'à te palucher les tutos :)
 
Rassures toi il y a énormément de similitudes avec le DOS :)


 
C'est sa le problème je ne trouve pas vraiment un tuto pour ce que je recherche  :(  !

Reply

Marsh Posté le 23-11-2010 à 15:37:11    

Salut,
Voici le script PS que j'ai modifié (la source ne vient pas de moi) pour backuper les VM dans un Hyper-V qu'on a. Il sauvegarde uniquement les machines qui sont référencées dans un répertoire bien précis (que tu peux bien sur changer) qui va avoir la date du jour (pratique si tu veux mettre plusieurs sauvegardes dans un même répertoire) :

 

##
## Create a backup of all the vm's
##

 

$dest = "Répertoire de sauvegarde"
$VM_Service = get-wmiobject -namespace root\virtualization Msvm_VirtualSystemManagementService
$ListofVMs = get-wmiobject -namespace root\virtualization Msvm_ComputerSystem -filter "ElementName = 'NOM EXACT DE LA VM'"
$date = get-date -uformat "%d-%m-%Y"
$ddest = $dest += $date += "-"  

 

foreach ($VM in [array] $ListOfVMs)
{
 $VMReturnState = $VM.EnabledState
 $VMName = $VM.ElementName

 

if (($VM.EnabledState -eq 2) -or ($VM.EnabledState -eq 32768) -or ($VM.EnabledState -eq 32770))
 {
  $VM.RequestStateChange(32769)
  echo "Saving the state of $VMName"
 }

 

while (!($VM.EnabledState -eq 32769) -and !($VM.EnabledState -eq 3))
 {
  Start-Sleep(1)
  $VM = get-wmiobject -namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='$VMName'"
 }

 


 if ([IO.Directory]::Exists("$ddest\TmpDir\$VMName" ))
 {
  [IO.Directory]::Delete("$ddest\TmpDir\$VMName", $True)
 }

 

echo "Exporting the VM"
 $status = $VM_Service.ExportVirtualSystem($VM.__PATH, $True, "$ddest\TmpDir" )
 
 if ($status.ReturnValue -eq 4096)
 {
  $job = [Wmi]$status.Job
 
  while (!($job.PercentComplete -eq 100) -and ($job.ErrorCode -eq 0))
  {
   Start-Sleep(5)
   $job = [Wmi]$status.Job
   echo $job.PercentComplete
  }
 }

 


 ## Store the files on in a temp directory before moving them to their location and then remove the old files.

 

if ([IO.Directory]::Exists("$ddest\$VMName" ))
 {
  [IO.Directory]::Move("$ddest\$VMName", "$ddest\$VMName-OldTmpDir" )
  [IO.Directory]::Move("$ddest\TmpDir\$VMName", "$ddest\$VMName" )
  [IO.Directory]::Delete("$ddest\$VMName-OldTmpDir", $True)
 }
 else
 {
  [IO.Directory]::Move("$ddest\TmpDir\$VMName", "$ddest\$VMName" )
 }
 
 echo "Done with $VMName"
 $VM.RequestStateChange($VMReturnState)
}

 


PS : ouais par contre, j'ai pas d'envoi de mail pour dire que le backup s'est bien passé :o

Message cité 1 fois
Message édité par Bocal83 le 23-11-2010 à 15:40:20
Reply

Marsh Posté le 24-11-2010 à 09:41:57    

Bocal83 a écrit :

Salut,
Voici le script PS que j'ai modifié (la source ne vient pas de moi) pour backuper les VM dans un Hyper-V qu'on a. Il sauvegarde uniquement les machines qui sont référencées dans un répertoire bien précis (que tu peux bien sur changer) qui va avoir la date du jour (pratique si tu veux mettre plusieurs sauvegardes dans un même répertoire) :
 
##
## Create a backup of all the vm's
##
 
$dest = "Répertoire de sauvegarde"
$VM_Service = get-wmiobject -namespace root\virtualization Msvm_VirtualSystemManagementService
$ListofVMs = get-wmiobject -namespace root\virtualization Msvm_ComputerSystem -filter "ElementName = 'NOM EXACT DE LA VM'"
$date = get-date -uformat "%d-%m-%Y"
$ddest = $dest += $date += "-"    
 
foreach ($VM in [array] $ListOfVMs)  
{
 $VMReturnState = $VM.EnabledState
 $VMName = $VM.ElementName
 
 if (($VM.EnabledState -eq 2) -or ($VM.EnabledState -eq 32768) -or ($VM.EnabledState -eq 32770))
 {
  $VM.RequestStateChange(32769)
  echo "Saving the state of $VMName"
 }
 
 while (!($VM.EnabledState -eq 32769) -and !($VM.EnabledState -eq 3))
 {
  Start-Sleep(1)
  $VM = get-wmiobject -namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='$VMName'"
 }  
 
 
 if ([IO.Directory]::Exists("$ddest\TmpDir\$VMName" ))
 {
  [IO.Directory]::Delete("$ddest\TmpDir\$VMName", $True)
 }
 
 echo "Exporting the VM"
 $status = $VM_Service.ExportVirtualSystem($VM.__PATH, $True, "$ddest\TmpDir" )
   
 if ($status.ReturnValue -eq 4096)
 {
  $job = [Wmi]$status.Job  
 
  while (!($job.PercentComplete -eq 100) -and ($job.ErrorCode -eq 0))
  {
   Start-Sleep(5)
   $job = [Wmi]$status.Job  
   echo $job.PercentComplete
  }  
 }
 
 
 ## Store the files on in a temp directory before moving them to their location and then remove the old files.
 
 if ([IO.Directory]::Exists("$ddest\$VMName" ))
 {
  [IO.Directory]::Move("$ddest\$VMName", "$ddest\$VMName-OldTmpDir" )
  [IO.Directory]::Move("$ddest\TmpDir\$VMName", "$ddest\$VMName" )
  [IO.Directory]::Delete("$ddest\$VMName-OldTmpDir", $True)
 }
 else
 {
  [IO.Directory]::Move("$ddest\TmpDir\$VMName", "$ddest\$VMName" )
 }
 
 echo "Done with $VMName"
 $VM.RequestStateChange($VMReturnState)
}
 
 
PS : ouais par contre, j'ai pas d'envoi de mail pour dire que le backup s'est bien passé :o


 
Merci bcp pour ce script  :) :) Maintenant faut que je trouve un script pour l'envoi de mail   :sweat:  :sweat: !! Si quelqu'un à une idée ??

Reply

Marsh Posté le 24-11-2010 à 09:41:57   

Reply

Marsh Posté le 24-11-2010 à 10:34:20    

A la fin de la sauvegarde tu as une trace dans les journaux d'évènements ? Auquel cas tu peux attacher une tâche planifiée à cet évènement.

Reply

Marsh Posté le 24-11-2010 à 10:55:25    

Regarde netsend.exe sur google :) apres t'as une bête commande de ce type :
MAILSEND +cc +bc -smtp MAILSERVERADRESS -d DOMAINE -from ADRESSE_EXPEDITEUR -to ADRESSE_DESTINATAIRE -sub "SUJET DE TON MAIL" -a PIECE_JOINTE
 
T'as juste un fichier .EXE a telecharger et à mettre dans ton dossier system32


---------------
Mon feed-back : http://forum.hardware.fr/hfr/Achat [...] 1974_1.htm
Reply

Marsh Posté le 24-11-2010 à 11:51:53    

Ouais enfin en powershell tu as send-mailmessage qui fait ça directement ...

Reply

Marsh Posté le 24-11-2010 à 14:21:48    

tiens je connaissais pas ... Merki je regarde ça desuite :)
 
EDIT : Je confirme que send-mailmessage est juste énorme : http://technet.microsoft.com/fr-fr [...] 47693.aspx


Message édité par ChaTTon2 le 24-11-2010 à 14:24:53

---------------
Mon feed-back : http://forum.hardware.fr/hfr/Achat [...] 1974_1.htm
Reply

Marsh Posté le 25-11-2010 à 13:34:48    

Salut,
On a un script PS qui envoi un mail (mais pas pour une sauvegarde d'une VM, c'est après le dump d'une base Oracle qui renvoi la dernière ligne du fichier log du backup) :
 
$a = (get-content fichier.log)[-1] (pour prendre la dernière ligne)
$file = "fichier.log"
 
$emailFrom = "PowerShell@domain.com"
$emailTo = "destinataire@domain.com"
$subject = "Sujet"
$body = "$a" << ajoute le .log en pièce jointe
 
$attachment = new-object System.Net.Mail.Attachment $file
$message.Attachments.Add($attachment)
 
$smtpServer = "Serveur de messagerie"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body, $attachment)
 
Après, si tu veux une entrée dans l'observateur d'évènement, tu peux toujours rajouter dans le .bat qui va lancer le script PS cette ligne :
 
eventcreate /ID 1 /L Application /T Information /SO Titre /D "Description"

Reply

Marsh Posté le 26-11-2010 à 09:48:14    

Merci pour toutes ces réponses  :D  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed