> Tech > Lister les VMs Hyper-V avec PowerShell

Lister les VMs Hyper-V avec PowerShell

Tech - Par Renaud ROSSET - Publié le 30 août 2011
email

La classe Msvm_ComputerSystem représente un ordinateur physique ou un ordinateur virtuel. Celle-ci possède un grand nombre de propriétés mais qu’une seule méthode. Parmi les propriétés existantes, la propriété Caption indique le type d’ordinateur (hôte ou VM).

Lister les VMs Hyper-V avec PowerShell

Nous devrons effectuer un filtre (réalisé grâce à Where-Object) sur la valeur « Ordinateur virtuel » afin de ne récupérer que ce type d’objets.

PS > $VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName
HYPERV-SRV

PS > $VMList = $VMList | Where-Object {$_.caption -eq ‘Ordinateur virtuel’}
PS > $VMList | Format-Table ElementName,EnabledState,InstallDate,OnTime* -Autosize

ElementName EnabledState InstallDate OnTimeInMilliseconds
———– ———— ———– ——————–
Windows 7 X64 3 20100524214841.000000-000 0
Windows 2008 R2 DC 2 20100524214224.000000-000 29615790
Windows Server 2003 3 20100524215129.000000-000 0

Dans cet exemple, en plus de récupérer le nom des machines virtuelles gérées par le serveur Hyper-V, j’ai volontairement choisi d’afficher d’autres propriétés telles que leur état, leur date de création ainsi que le temps écoulé en millisecondes depuis leur dernier démarrage.

Astuce : vous pouvez remarquer qu’il est possible d’utiliser le caractère générique « * » dans les noms de propriétés avec les commandes de formatage telles que Format-Table et Format-List. Cela permet d’une part de ne pas avoir à entièrement taper le nom des propriétés, et d’autre part d’afficher toutes les propriétés dont leur nom correspond au « pattern ».

Concernant la propriété EnabledState, la valeur 2 correspond à l’état « démarré » et la valeur 3 à l’état « arrêté ». La liste des valeurs possible est décrite sur la page MSDN consacrée à la description de la classe Msvm_ComputerSystem (http://msdn.microsoft.com/en-us/library/cc136822.aspx).

Il est possible d’améliorer le résultat de l’affichage en utilisant une table de hachage couplée à la commande Format-Table :

$VMList |
Format-Table @{label=’VMName’;
expression={$_.ElementName}},
@{label=’State’;
expression={switch ($_.EnabledState) {2 {« Running »} 3 {« Stopped »} }}},
@{label=’InstallDate’; expression
{[System.Management.ManagementDateTimeConverter]::ToDateTime($_.InstallDate)}},
@{label=’Uptime (S)’;
expression={[Int]($_.OnTimeInMilliseconds/1000)} } -AutoSize

VMName State InstallDate Uptime (S)
—— —– ———– ———-
Windows 7 X64 Stopped 24/05/2010 23:48:41 0
Windows 2008 R2 DC Running 24/05/2010 23:42:24 29616
Windows Server 2003 Stopped 24/05/2010 23:51:29 0

Cette technique nous permet de réaliser un pré-traitement avant restitution des données. J’en ai donc profité pour réaliser les opérations suivantes :

  • Modification du nom des colonnes afin de leur donner un nom plus explicite,
  • Remplacement, grâce à un traitement, des valeurs d’état par leur état réel,
  • Conversion de la date au format WMI en une date intelligible pour l’homme grâce la méthode statique ToDateTime du Framework .NET,
  • Conversion des millisecondes en secondes par le biais d’une simple division suivie d’une conversion du résultat en nombre entier pour éviter les nombres à virgule.

Téléchargez cette ressource

Guide de Reporting Microsoft 365 & Microsoft Exchange

Guide de Reporting Microsoft 365 & Microsoft Exchange

Comment bénéficier d’une vision unifiée de vos messageries, mieux protéger vos données sensibles, vous conformer plus aisément aux contraintes réglementaires et réduire votre empreinte carbone ? Découvrez la solution de reporting complet de l’utilisation de Microsoft Exchange, en mode on-premise ou dans le Cloud.

Tech - Par Renaud ROSSET - Publié le 30 août 2011