Pour un rendu optimal, activez JavaScript

[PowerCLI] Générer un rapport HTML sur les disques virtuels des VM

 ·  ☕ 2 min de lecture  ·  🦆 Jeremy

VM Disk Report

On m’a récemment demandé comment récupérer simplement la configuration des disques virtuels des VM, notamment pour vérifier les types de contrôleur disque.

Pour de nombreux systèmes d’exploitation, VMware recommande l’utilisatation du contrôleur VMware Paravirtual (PVSCSI). Vous pouvez d’ailleurs simplement vérifier pour votre OS ici : https://www.vmware.com/resources/compatibility/search.php?deviceCategory=software

L’idée est donc de pouvoir récupérer la liste des VM d’un vCenter et d’afficher la configuration de ses disques virtuels. Voici les informations à récupérer :

  • Nom de la VM
  • Nom des disques
  • Type de disque (Thin, Thick, EagerZero)
  • Contrôleur SCSI associé

En soi rien de difficile, si ce n’est de trouver un format d’affichage clair. Après plusieurs essais, j’en suis arrivé à utiliser le format HTML qui facilite l’affichage des informations des disques avec une petite astuce (pas très propre je vous l’accorde !) qui consiste à venir ajouter une balise ‹/br› pour chaque nouveau disque.

Le script est sur GitHub: https://github.com/plop-bzh/VMHardDiskReport

Un extrait avec la boucle principale pour collecter les données

 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
FOREACH ($v in $vm) {
    Write-LogInfo ("{0}" -f $v.Name) 
    $tvm += "" | Select-Object @{
        Name="VM Name"
        Expression={$v.Name}
    },@{
        Name="Disks"
        Expression={$v | Get-HardDisk | ForEach-Object{($_.FileName) + " xxxx"}}
    },@{
        Name="Format"
        Expression={$v | Get-HardDisk | ForEach-Object{($_.StorageFormat).ToString() + " xxxx"}}
    },@{
        Name="SCSI Controller"
        Expression={
            $v | Get-HardDisk | ForEach-Object{
                $ctrl = ($_ | Get-ScsiController).ExtensionData.DeviceInfo.Summary
                $bus = (($_ | Get-ScsiController).ExtensionData.BusNumber).ToString()
                $unitNumber = ($_.ExtensionData.UnitNumber).ToString()
                '{0} ({1}:{2}) xxxx' -f $ctrl, $bus, $unitNumber
            }
        }
    },@{
        Name="Size"
        Expression={$v | Get-HardDisk | ForEach-Object{[math]::round(($_.CapacityGB),2).ToString()+" Go xxxx"}}
    }
}

Exemple de retour :

J’espère que ça pourra aider 😊

Partagez