Partagez l'article

Connexion






Mot de passe oublié ?
Identifiant oublié ?
Pas encore inscrit ? Créer un compte

Up-coming events

There are no up-coming events

Powershell Export Hyper-V Configuration Files PDF Imprimer Envoyer
Note des utilisateurs: / 1
MauvaisTrès bien 
Écrit par Cédric Bravo   

Automatiser l'exportation des machines virtuelles Hyper-V avec Powershell

pshell   Depuis Hyper-V 2012, l'exportation des machines virtuelles est possible à chaud. Depuis l'interface graphique, cette opération offre peu d'options. Avec Powershell, il est possible de personaliser l'export. Ceci peut s'avérer particulièrement utile quand on souhaite effectuer l'export des fichiers de configuration des VM sans les disques virtuels. Cet article vous propose de découvrir les clefs de la manipulation de VM avec WMI et Powershell.

Peu de gens le savent, mais le service VMMS de Hyper-V (Virtual Machine Management Service) fonctionne essentiellement en WMI par le biais des "Virtual System Management Classes"


Exporter ses machines virtuelles avec Powershell peut s'avérer complexe pour celui qui ne connais pas WMI.

La classe qui nous permet de manipuler les machines virtuelles est : Msvm_VirtualSystemManagementService.

 

C'est cette classe qui permet de manipuler les machines virtuelles (modifications, création, suppression, snapshots, cloning, export etc etc.)

La première chose à faire est donc d'instancier cette classe pour pouvoir l'utiliser (On remarquera que cette classe n'est pas dans le namespace par défaut Root\CIMV2)

 

  $VSMgmtSvc = gwmi -n "Root\Virtualization\V2" Msvm_VirtualSystemManagementService

 

Dans l'exemple qui nous intéresse, nous voulons exporter la configuration d'une machine virtuelle sans les disques. Nous allons pour ce faire utiliser la méthode ExportSystemDefinition.

Comme décrit dans sa documentation, cette méthode nécessite 3 paramètres.

Pour récupérer notre objet CIM_ComputerSystem, nous allons donc faire une requête en filtrant la propriété "ElementName" qui correspond au nom de la machine virtuelle.

 

$VMName = "NOM DE MA VM"

$VMComputerSystem= gwmi -n "root\virtualization\v2" Msvm_ComputerSystem|?{

  $_.ElementName -eq $VMName

}

 

Maintenant que nous disposons de notre objet VM, nous allons récupérer l'instance de l'objet Msvm_VirtualSystemExportSettingData associé à chaque VM.

Pour ce faire, nous allons filtrer sur la propriété "InstanceID" qui contient le nom de la VM (GUID) que l'on trouve dans la classe CIM_ComputerSystem.

  

$VMExportSetting = gwmi -n "root\virtualization\v2" Msvm_VirtualSystemExportSettingData |?{$_.InstanceID.Contains($VMComputerSystem.Name)}

 

Une fois en possession de cet objet, il faut lui modifier certaines propriétés afin de répondre à nos besoins.

 

  #Don't export VHDX
  $VMExportSetting.CopyVmStorage = $False
 

  #Don't export Runtime
  $VMExportSetting.CopyVmRuntimeInformation = $False
 

  #Create a subdirectory with the name of the vm
  $VMExportSetting.CreateVmExportSubdirectory = $True
 

  #Don't export SnapShots
  $VMExportSetting.CopySnapshotConfiguration = 1

 

Ces éléments configurés, il faut convertir notre objet " VirtualSystemExportSettingData" en String. En effet, comme dans sa documentation, la méthode "ExportSystemDefinition" nécessite que ces paramètres soient passés en String... C'est assez courant avec WMI.


  #Convert the Setting object to string
  $VMExportSettingString = $VMExportSetting.GetText(1)

 

Une fois convertis, il ne nous reste plus qu'a appeler notre méthode correctement renseignée.

  $VSMgmtSvc.ExportSystemDefinition($VMComputerSystem,$Destination,$VMExportSettingString)

 

Et le tour est joué !

Pour aller plus loin on pourra ajouter un certain nombre de contrôles afin de s'assurer de la bonne exécution de la commande.

En effet, les exécutions de méthodes WMI avec Msvm_VirtualSystemManagementService sont asynchrones et renvoient à un objet Job dont on peut interroger le statu.

Pour plus de détails sur la gestion des jobs WMI de cette classe, vous pouvez consulter le post de Ben Armstrong sur le sujet (Handling Job Object with Hyper-V WMI Scripting)

 

Un script complet avec la gestion d'erreur des jobs est disponible dans notre section téléchargements.

 

 

 

Mise à jour le Lundi, 30 Novembre 2015 09:41
 
Bannière

Joomla! is Free Software released under the GNU/GPL License.