In this case, I wanted a quick analysis on my Hyper-V VM’s vhd files and get the disk size and free disk space before upgrading to Server 2012 R2 Hyper-V.
The snippet basically loops trough all VM’s on a host (or in a cluster if you would want that), and gives you output as below.
If you want information on all disks for all VM’s in a cluster you can get that with Get-VHDStat -Cluster ClusterName.
Get-VHDStat
function Get-VHDStat {
param(
[Parameter(Mandatory=$false)]
[string]
$Cluster
)
if ($Cluster) {
$VMs = Get-ClusterGroup -Cluster $cluster | where grouptype -eq 'virtualmachine' | Get-VM
} else {
$VMs = Get-VM
}
foreach ($VM in $VMs){
$VHDs=Get-VHD $vm.harddrives.path -ComputerName $vm.computername
foreach ($VHD in $VHDs) {
New-Object PSObject -Property @{
Name = $VM.name
Type = $VHD.VhdType
Path = $VHD.Path
'Total(GB)' = [math]::Round($VHD.Size/1GB)
'Used(GB)' = [math]::Round($VHD.FileSize/1GB)
'Free(GB)' = [math]::Round($VHD.Size/1GB- $VHD.FileSize/1GB)
}
}
}
}
Enjoy!
/Johan

