## 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