1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# Définit le chemin de sauvegarde pour les VM ainsi que le fichier de log
[String]$BackupPath = "E:\Backups\Hyper-V"
[String]$ErrorLog = "E:\Backups\Hyper-VBackups.log"
# Enregistre la date et heure du début de la procédédure
$Start = Get-Date
"$(Get-Date) - Hyper-V Backups Starting." | Out-File $ErrorLog -Append
# Supprime les éléments précédemment sauvegardés
Try
{
Get-Childitem $BackupPath -Recurse -Force | Remove-Item -Recurse -Force -ErrorAction Stop
}
Catch
{
"$(Get-Date) - Error during Get-Childitem or Remove-Item: $($_.Exception.Message)" | Out-File $ErrorLog -Append
Return
}
# Récupère la liste des VM en cours d'exécution et les met en pause
Try
{
Get-VM -ErrorAction Stop | Where-Object {$_.State eq 'Running'} | Suspend-VM -ErrorAction Stop -Save
}
Catch
{
"$(Get-Date) - Error during Get-VM Suspend-VM -Save: $($_.Exception.Message)" | Out-File $ErrorLog -Append
Return
}
# Récupère la liste des VM en pause et les exporte dans le dossier de sauvegarde
Try
{
Get-VM -ErrorAction Stop | Where-Object {$_.State eq 'Paused'} | Export-VM -ErrorAction Stop -Path $BackupPath
}
Catch
{
"$(Get-Date) - Error during Export-VM: $($_.Exception.Message)" | Out-File $ErrorLog -Append
Return
}
# Récupère la liste des VM en pause et les relance
Try
{
Get-VM -ErrorAction Stop | Where-Object {$_.State eq 'Paused'} | Resume-VM -ErrorAction Stop
}
Catch
{
"$(Get-Date) - Error during Resume-VM: $($_.Exception.Message)" | Out-File $ErrorLog -Append
Return
}
# Enregistre la dte et heure de fin du processus
$End = Get-Date
"$(Get-Date) - Hyper-V Backups completed in $([Math]::Round((New-TimeSpan $Start $End).TotalMinutes)) minutes." | Out-File $ErrorLog -Append |
Partager