Cybersécurité, Virtualisation & Intelligence Artificielle... VIRTU-DESK - Technologies de virtualisation et sécurisation de l'environnement utilisateurs.

Script PowerCLI pour l'inventaire des VMDK

Par Le dimanche, 20 juillet 2014 0

Dans Divers

 

Il est parfois utile dans un cluster VMware d'inventorier les VMDK utilisés par les les VMs (vues par le vCenter) d'un enviromment VDI par exemple. Voici un petit script qui permet de les récupérer dans un fichier Excel.

Les prérequis pour que l'inventaire soit complet sont les suivants :

  • Les VMware Tools doivent êtres installés sur toutes les VMS
  • Le nombre de partitions des VMs doit être identique au nombre de VMDK

 

Le script :

## Pré requis : la VM doit être installée avec un nombre identique de VMDK et de partitions vus du système pour que
##              l'utilisation de la seconde partie du script soit pertinente. Donc peu utilisable avec des VM Linux.
### Variables ###
$vcenter = read-host "Saisissez le nom ou l'ip de votre vCenter"
$logfilexls = "c:tmpalogfile.xls"
$diskseuil = 10                                    #Seuil d'affichage d'un espace disque disponible critique (Rouge).
$diskseuilbas = 20                                 #Seuil d'affichage d'un espace disque disponible faible (orange).
$excel = New-Object -ComObject Excel.Application
$excel.visible = $True
$excel = $excel.Workbooks.Add()
### Initialisation du tableau Excel ###
# pour personnaliser les couleurs des cellules : <a href="http://www.mvps.org/dmcritchie/excel/colors.htm">http://www.mvps.org/dmcritchie/excel/colors.htm</a>
$Sheet = $Excel.Worksheets.Item(1)
$Sheet.Cells.Item(1,1) = "Nom du Datacenter"
$Sheet.Cells.Item(1,2) = "Nom de l'hôte"
$Sheet.Cells.Item(1,3) = "Nom de VM"
$Sheet.Cells.Item(1,4) = "Id Disque"
$Sheet.Cells.Item(1,5) = "Chemin VMDK"
$Sheet.Cells.Item(1,6) = "Capacité (Go)"
$Sheet.Cells.Item(1,7) = "Espace libre (Go)"
$Sheet.Cells.Item(1,8) = "Pourcentage Libre"
$Sheet.Cells.Item(1,9) = "Volume occupé (Go)"
$Sheet.Cells.Item(1,10) = "Format"
$WorkBook = $Sheet.UsedRange
$WorkBook.Interior.ColorIndex = 15
$WorkBook.Font.Bold = $True
$introw =2
connect-viserver $vcenter
### Première partie : récupération de tous les disques durs utilisés par les VM (classés par VM, par host, par datacenter)
$dc = get-datacenter |select name,id
  foreach ($_.name in $dc ) {
    $logdc = $_.name
    write-host $logdc
    $listvm = get-datacenter $logdc | get-vm | select name,vmhost,powerstate
    foreach ($_.name in $listvm){
        #Identification de la VM
        $vmname = [string]$_.name
        $vmhost = [string]$_.vmhost
        $vmstate = [string]$_.powerstate
        #Récupération des informations des disques
        $introw2 = $introw
        $vmdiskproperties = get-vm $vmname | get-harddisk | select name, filename,capacitykb, storageformat
        $vmdiskproperties | foreach-object {
          $vmdkinfo = [string]$_.name
          $vmdkname = [string]$_.filename
          $vmdkformat = [string]$_.storageformat
          $vmdkcapa = $_.capacitykb /1024 /1024
          #Remplissage du tableau
          $Sheet.Cells.Item($intRow, 1) = $logdc
          $Sheet.Cells.Item($intRow, 2) = $vmhost
          $Sheet.Cells.Item($intRow, 3) = $vmname
           #Coloration Verte pour VM en marche
          if ($vmstate -match "PoweredOn"){$Sheet.Cells.Item($intRow, 3).Interior.ColorIndex = 10
                                           $Sheet.Cells.Item($intRow, 3).Font.ColorIndex = 2}
          $Sheet.Cells.Item($intRow, 4) = $vmdkinfo
          $Sheet.Cells.Item($intRow, 5) = $vmdkname
          $Sheet.Cells.Item($intRow, 6) = $vmdkcapa
          $Sheet.Cells.Item($intRow, 10) = $vmdkformat
          $intRow++
          }
### Seconde partie : récupération des taux d'utilisation des VMDK, les valeurs dépendent de l'installation des VMwareTools
 #       $ostools = get-vm $vmname | get-view | select -expandproperty Guest  | Select toolsstatus, toolsrunningstatus
 #       $ostools | foreach-object { $ostools = $_.toolsstatus
 #                                   $ostoolsrun = $_.toolsrunningstatus
 #                                 }
 #       #Données des volumes présentés       
 #       $osdisks = get-vm $vmname | get-vmguest | where{$_.disks} | select -expandproperty disks vmname | Select vmName, capacity, FreeSpace, @{ N="PercentFree"; E={ "{0:f2}" -f ($_.FreeSpace / $_.Capacity * 100)  }}
 #       $osdisks | foreach-object {
 #         $osdiskcapa = $_.Capacity
 #         $osdiskfree = $_.freespace
 #         $ospercentfree = $_.percentfree
 #         #Pour éviter des alertes de volumes sur des OS
 #         if ($ostoolsrun -match "guestToolsRunning") {
 #           if ($intRow2 -lt $intRow){
 #           $Sheet.Cells.Item($intRow2, 7) = $osdiskfree/1024/1024/1024
 #           $Sheet.Cells.Item($intRow2, 8) = $ospercentfree
 #           $Sheet.Cells.Item($intRow2, 9) = ($osdiskcapa - $osdiskfree) /1024/1024/1024
 #           if ($ospercentfree -le $diskseuilbas){
 #             $Sheet.Cells.Item($intRow2, 8).Interior.ColorIndex = 45
 #             if ($ospercentfree -le $diskseuil){
 #               $Sheet.Cells.Item($intRow2, 8).Interior.ColorIndex = 3
 #               }
 #             }
 #           }}
 #         else{
 #           $Sheet.Cells.Item($intRow2, 7) = "VMware Tools HS"
 #           }
 #         $intRow2++
 #         }
    }
  }
$WorkBook.EntireColumn.AutoFit()
$sheet.SaveAs($logfilexls)
disconnect-viserver -confirm:$false

 

Les sources de ce billet se trouvent sur ce lien.

1 vote. Moyenne 5 sur 5.
Vous devez être connecté pour poster un commentaire