Question Sauvegarde automatique VMWare Server

Plus d'informations
il y a 14 ans 6 mois #10561 par Willy
Bonjour,

Je souhaite mettre en place une sauvegarde automatique de mes VMs.
Pour info :
Serveur Hote : Windows 7
Version VMWare: VMware-server-2.0.2-203138
version APICOM: VMware-VmCOMAPI-2.3.2-39850

Mon script de sauvegarde est le suivant :

[code:1]
##########################################################
# Script de sauvegarde de toutes les machines virtuelles sur un serveur VMWARE Server #
##########################################################

param (
[string] $File
)

## Emplacement du fichier des fonctions
$scriptpath = \"C:\Scripts\functions\"

## Inclue Main Functions
. $scriptpath\function_basic.ps1

$Config = Import-ini ($File)

## Nom du serveur
$ServerName = $Config[\"Server\"][\"Name\"]

## Destination des backups
$BackupPath = $Config[\"Backup\"][\"Destination\"]

## Vms
$VMsBck = $Config[\"Backup\"][\"VMs\"]

## Nom du client
$ClientName = $Config[\"Options\"][\"Client\"]

## Disk
$Disk = $Config[\"Options\"][\"Disk\"]

## Method de sauvegrde 1,2,0
$Method = $Config[\"Options\"][\"Method\"]

## Configuration mail
$SmtpServer = $Config[\"Mail\"][\"Smtp\"]
$SmtpPort = $Config[\"Mail\"][\"SmtpPort\"]
$Ssl = $Config[\"Mail\"][\"Ssl\"]
$Username = $Config[\"Mail\"][\"Username\"]
$Password = $Config[\"Mail\"][\"Password\"]
$From = $Config[\"Mail\"][\"From\"]
$To = $Config[\"Mail\"][\"To\"]

## Nb Jours
$OldDays = $Config[\"Options\"][\"Days\"]

#######################
# Ne pas modifier #
#######################

## VMs list
#$VMs=($Config.VirtualMachines.VMs).split(\",\"«»)
$VMs = ($VMsBck).split(\",\"«»)

## [Parametres]
$NomClient = $ClientName
$NomServeurHote = $ServerName
#$RepertoireHyperV = $TargetPath
$Destination = $BackupPath+\"\vm\"

## [Mail]
$Expediteur = $From
$Destinataire = $To
$ServeurMail = $SmtpServer

## Recapitulatif
write-host \"\"
write-host \"\"
write-host \"Nom du serveur : $ServerName\"
write-host \"Destination du backup : $Destination\"
write-host \"Type de sauvegarde : $NewPathBackup\"
write-host \"Nombre de sauvegarde : $OldDays\"
write-host \"Disk monitoring : $Disk\"
write-host \"Method : $Method\"
write-host \"\"
write-host \"Messagerie \"
write-host \"Serveur SMTP : $ServeurMail\"
write-host \"From : $Expediteur\"
write-host \"To : $Destinataire\"
write-host \"\"
write-host \"\"

## Init
$info = \"\"

## Date
$date = get-date
$date2 = $date
$date3 = $date
$Old = $date.AddDays(-$oldDays)
$Date = get-date -f \"dd-MM-yy\"

$Day = $date3.dayofweek

## LOG
$path = \"C:\Scripts\VMWare-backup\log-$Date.txt\"
#-Path
$log = New-Item $path -Type file -Force


## Recherche du repertoire de destination
if([IO.Directory]::Exists(\"$Destination\"«»)){
write-host \"Le repertoire de sauvegarde a ete trouve\" -foregroundcolor green
$info = $info + \"`nLe repertoire de sauvegarde a ete trouve\"

sleep 2
#Start-Sleep(2)

$ERRORDEST = 0
} else {
write-host \"Le repertoire de sauvegarde est introuvable !!!\" -foregroundcolor black -backgroundcolor red
$objet = \"ECHEC !!! Rapport VMWare du client [ $NomClient ] pour le Serveur [ $VMName ] - Date : \" + [System.DateTime]::Now
$texte = \"Bonjour, `nLe repertoire $Destination est introuvable !!!\"
$info = $info + \"`nLe repertoire de sauvegarde est introuvable !!!\"
$ERRORDEST = 1
}
## Fin

if ($ERRORDEST -eq 0){

#
$VmPowerOpMode_Hard = 1

#
$VmPowerOpMode_Soft = 2

#
$VmPowerOpMode_TrySoft = 3


# Etat off de la VM
$VmExecutionState_Off = 2

# Etat on de la VM
$VmExecutionState_On = 1


$VmExecutionState_Stuck = 4

# Etat suspend de la VM
$VmExecutionState_Suspended = 3

# Etat unconnu de la VM
$VmExecutionState_Unknown = 5


# Création des objects VMCOM nécessaires pour communiquer avec les machines virtuelles
$vm_serveur = New-Object -comObject VmCOM.VmServerCtl
$params = New-Object -comObject VmCOM.VmConnectParams

$vm_serveur.Connect($params)

$noms_machines = $vm_serveur.RegisteredVmNames

# Cette instance spécifie le journal d’événements application
$event = New-Object -TypeName System.Diagnostics.EventLog -argumentlist application

# Spécification de la source
$event.Set_source(\"script de sauvegarde\"«»)

# Listage toutes les machines virtuelles


foreach($name in $noms_machines){
#foreach ($VM in [array] $ListOfVMs){
foreach ($Guest in [array] $VMs){

if($name -eq $Guest){
# Connection a la machine virtuelle
$vm = new-object -comobject vmcom.vmctl
$vm.connect($params, $Guest)


if($vm.ExecutionState -eq $VmExecutionState_On){
$vm.suspend($VmPowerOpMode_TrySoft)

while($vm.ExecutionState -ne $VmExecutionState_Suspended){
}

$indice = $nom.LastIndexOf(\"\\"«»)
$nom_rep_machine = $nom.substring(0,$indice)
$indice = $nom_rep_machine.LastIndexOf(\"\\"«»)
$nom_machine = $nom_rep_machine.substring($indice+1,$nom_rep_machine.length-$indice-1)

Copy-Item $nom_rep_machine -Recurse $Destination -force
$event.WriteEntry(\"la machine vituelle : $nom_machine, est sauvegardée\"«»)
write-host \"$nom_machine : machine sauvegardée\" -foregroundcolor green
$vm.start($VmPowerOpMode_TrySoft)

$objet = \"Rapport VMWAre du client [ $NomClient ] pour le Serveur [ $name ] - Date : \" + [System.DateTime]::Now
$texte = \"Bonjour,`n`n Sauvegarde du $date effectuée pour la machine vituelle : $name `n`nClient : $NomClient `nServeur Hôte : $ServerName\"

$info = $info + \"`nSauvegarde du $date effectuée pour la machine vituelle : $name\"
}elseif($vm.ExecutionState -eq $VmExecutionState_Suspended -or $VmExecutionState_Off){
$indice = $nom.LastIndexOf(\"\\"«»)
$nom_rep_machine = $nom.substring(0,$indice)
$indice = $nom_rep_machine.LastIndexOf(\"\\"«»)
$nom_machine = $nom_rep_machine.substring($indice+1,$nom_rep_machine.length-$indice-1)

Copy-Item $nom_rep_machine -Recurse $Destination -force
$event.WriteEntry(\"la machine vituelle : $nom_machine, est sauvegardée\"«»)
write-host \"$nom_machine : machine sauvegardée\" -foregroundcolor green


$objet = \"Rapport VMWAre du client [ $NomClient ] pour le Serveur [ $name ] - Date : \" + [System.DateTime]::Now
$texte = \"Bonjour,`n`n Sauvegarde du $date effectuée pour la machine vituelle : $name `n`nClient : $NomClient `nServeur Hôte : $ServerName\"

$info = $info + \"`nSauvegarde du $date effectuée pour la machine vituelle : $name\"
}


}
}
}


}
## Poste de mail
write-host Poste du mail

$msg = New-Object System.Net.Mail.MailMessage
$smtp = New-Object System.Net.Mail.SmtpClient ($SmtpServer, $SmtpPort)

if($Ssl -eq 1){
$smtp.EnableSsl = $true
}else{
$smtp.EnableSsl = $false
}

if($Username){
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
}

$msg.From = $From
$msg.To.Add($To)
$msg.Subject = $objet
$msg.Body = $texte
$smtp.Send($msg)

Add-Content -Path $log -Value $info

################################################################################################################################
# powershell -command \"&{C:\Scripts\VMWare-backup\VMWareBackup.ps1 C:\Scripts\VMWare-backup\default.ini}\" #
################################################################################################################################

[/code:1]

Le fichier default.ini:

[code:1]
[Server]
Name=VSSERVER

[Backup]
DiskSource=C:
Destination=C:
VMs=DC01

[Options]
Client=ENTREPRISE
Days=0
Disk=C:
Method=1

[Mail]
Smtp=smtp.orange.fr
Smtpport=25
Ssl=0
Username=
Password=
From=mail@orange.fr
To=mail@orange.fr

[/code:1]

Les fonctions d'import des fichier INI:
(emplacement C:\scripts\functions\function_basic.ps1)

[code:1]
####################################
# Import de fichier *.ini #
####################################

function Import-ini([string]$file) {
$ini = @{}
switch -regex -file $file
{
\"^\[(.+)\]$\"
{
$section = $matches[1]
$ini[$section] = @{}
}
\"(.+)=(.*)\"
{
$name, $value = $matches[1..2]
$ini[$section][$name] = $value
}
}
$ini
}
####################################

[/code:1]

Après exécution du script avec la commande :

powershell -command \"&{C:\Scripts\VMWare-backup\VMWareBackup.ps1 C:\Scripts\VMWare-backup\default.ini}\"

J'ai le message d'erreur suivant :

VMControl Panic: NOT_IMPLEMENTED lib/vmcontrol/vmcontrolSoapUtil.c:1220

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.038 secondes
Propulsé par Kunena