VMware Cloud Community
padulka
Hot Shot
Hot Shot
Jump to solution

Export VMs disk usage lists

Hi to all,

I need to export a weekly reports to list a specific VMs, deployed around 5 vCenters, OS disk % usage space status and sort by this value.

 
Using the command on the following post:
https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/PowerCLI-VM-Disk-Usage/td-p/1409959

I tried this:

$viServer = Read-Host 'Please Enter Your vCenter hostname/IP address'
$cred = Get-Credential
Connect-VIServer $viServer -Credential $cred

######VMs that starts with VDI
$vmlists = Get-VM | Where-Object {($_.Name -like "VDI*")}

$report = @()
foreach($vm in $vmlists){
   Get-HardDisk -VM $vm | ForEach-Object {
   $HardDisk = $_
   $row = "" | Select VM, GuestName, Datastore, HardDisk, DiskType, CapacityGB, DiskFreespace, TotalVMFSConsumed, ProvisionType
   $row.VM = $VM.Name
   $row.GuestName = $vm.Guest.HostName
   $row.HardDisk = $HardDisk.Name
   $row.CapacityGB = ("{0:f1}" -f ($HardDisk.CapacityKB/1MB))
   $row.DiskFreespace = $vm.Guest.Disks | Measure-Object FreeSpaceGB -Sum | Select -ExpandProperty Sum
   $row.DiskType = $HardDisk.get_DiskType()
   $row.TotalVMFSConsumed = $vm.get_UsedSpaceGB()
   $row.ProvisionType = $HardDisk.StorageFormat
   $report += $row
   }
}
$report | Export-Csv -Path C:\reports\VMDisk-CapacityReport.csv -NoTypeInformation -UseCulture

 

but how can I convert to used % and sort by this value?

Regards

Labels (1)
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

You could do

Get-VM | Where-Object {($_.Name -like "VDI*")} |
Select Name,
@{N=“GuestCapacityGB";E={[math]::Round(($_.Guest.Disks | %{ $_.Capacity / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},
@{N="GuestUsageGB";E={[math]::Round(($_.Guest.Disks | %{$_.CapacityGB - $_.FreeSpaceGB} | Measure-Object -Sum | Select -ExpandProperty Sum),1)}},
@{N=“FreeSpaceGB";E={[math]::Round(($_.Guest.Disks | %{ $_.FreeSpace / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},
@{N="GuestUsage(%)";E={
    $capacityGB = ($_.Guest.Disks | Measure-Object -Property CapacityGB -Sum).Sum
    $freeGB = ($_.Guest.Disks | Measure-Object -Property FreeSpaceGB -Sum).Sum
    [math]::Round((($capacityGB - $freeGB)/$capacityGB*100),2)}} |
Sort-Object -Property "GuestUsage(%)" |
Export-Csv -Path .\report.csv -NoTypeInformation -UseCulture


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

5 Replies
LucD
Leadership
Leadership
Jump to solution

Which property do you want in %?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
padulka
Hot Shot
Hot Shot
Jump to solution

VM guest OS usage.

I find this:

#$vmlists = Get-VM | Where-Object {($_.Name -like "VDI*")}

Get-VM | Where-Object {($_.Name -like "VDI*")} |

Select Name,

@{N=“GuestCapacityGB";E={[math]::Round(($_.Guest.Disks | %{ $_.Capacity / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},

@{N="GuestUsageGB";E={[math]::Round(($_.Guest.Disks | %{$_.CapacityGB - $_.FreeSpaceGB} | Measure-Object -Sum | Select -ExpandProperty Sum),1)}},

@{N=“FreeSpaceGB";E={[math]::Round(($_.Guest.Disks | %{ $_.FreeSpace / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},

@{N="GuestUsage(%)";E={

    $capacityGB = $_.Guest.Disks | Measure-Object -Property CapacityGB -Sum | Select -ExpandProperty Sum

    $freeGB = $_.Guest.Disks | Measure-Object -Property FreeSpaceGB -Sum | Select -ExpandProperty Sum

    [math]::Round((($capacityGB - $freeGB)/$capacityGB*100),2)}} | ft #,
Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

So your question is answered I assume?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
padulka
Hot Shot
Hot Shot
Jump to solution

@LucD  partially.

I need to add export to csv, as in attachment. 

If it was possible to order the output on column "GuestUsage(%)" directly in the export command.

Thanks

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

You could do

Get-VM | Where-Object {($_.Name -like "VDI*")} |
Select Name,
@{N=“GuestCapacityGB";E={[math]::Round(($_.Guest.Disks | %{ $_.Capacity / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},
@{N="GuestUsageGB";E={[math]::Round(($_.Guest.Disks | %{$_.CapacityGB - $_.FreeSpaceGB} | Measure-Object -Sum | Select -ExpandProperty Sum),1)}},
@{N=“FreeSpaceGB";E={[math]::Round(($_.Guest.Disks | %{ $_.FreeSpace / 1GB} | Measure-Object -Sum | Select -ExpandProperty Sum),2)}},
@{N="GuestUsage(%)";E={
    $capacityGB = ($_.Guest.Disks | Measure-Object -Property CapacityGB -Sum).Sum
    $freeGB = ($_.Guest.Disks | Measure-Object -Property FreeSpaceGB -Sum).Sum
    [math]::Round((($capacityGB - $freeGB)/$capacityGB*100),2)}} |
Sort-Object -Property "GuestUsage(%)" |
Export-Csv -Path .\report.csv -NoTypeInformation -UseCulture


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference