get-vm | select Name, Description, PowerState, Memory*, @{Name="Host"; Expression={$_.Host.Name}} | export-csv c:\output.csv
The above does a good job at getting most of the info I need. I would like to add total hardrive space given to each vm as well whether there is 1, 2 or more harddrives. I tried a couple of things but could get it to work. Any quick solutions? Thanks!
Just so happens I was working on something like this the other day. A VM has a HardDisks property which is an array of virtual HD objects. You can get the virtual disk size from that. However, if you want partition size, you have to access the Disks property of the Guest property. This only works if the VMware Tools are running. The Disks property holds an array of DiskInfo objects, one for each drive. It has properties for Capacity and FreeSpace. In this example $dvm is a collection of 2 VMs. Note you get the "hard drive manufacturer answer" on size when accessing the Virtual HD object, but the OS formatted capacity on the DiskInfo object.
51# $dvm | ft harddisks HardDisks --------- {Hard Disk 1} {Hard Disk 1} 52# $dvm[0].HardDisks CapacityKB Persistence Filename ---------- ----------- -------- 10485760 Persistent ...e] dragon (LAN Survey)/dragon (LAN Survey).vmdk 53# $dvm[0].Guest.Disks Path Capacity FreeSpace ---- -------- --------- C:\ 10725732352 2494869504 54# $dvm[0].Guest.Disks[0].Capacity / 1KB 10474348 55# $dvm[0].Guest.Disks[0].Capacity / 1MB 10228.85546875 56# $dvm[0].Guest.Disks[0].Capacity / 1GB 9.98911666870117
Hal Rottenberg
Co-Host, PowerScripting Podcast (http://powerscripting.net)
Thanks, now I just need to figure out what that does to my script. I think I am a little pipe happy so I am gonna start from scratch and try it a different way. If anyone has this or can quickly show how this will fit into my script it would be great appreciated.
I will start on my own though and should have it figured out in a day or so
Nothing wrong with pipe-happy. In context, of course.
get-vm | select name, { $_.HardDisks | % { $_.CapacityKB } }
I have no idea if this works, I don't have any VMs with multiple disks. It worked for 1 disk though. Let me know.
Hal Rottenberg
Co-Host, PowerScripting Podcast (http://powerscripting.net)
get-vm | select Name, Description, PowerState, Memory*, @{Name="Host"; Expression={$_.Host.Name}} | export-csv c:\output.csv
The above does a good job at getting most of the info I need. I would like to add total hardrive space given to each vm as well whether there is 1, 2 or more harddrives. I tried a couple of things but could get it to work. Any quick solutions? Thanks!
It's a bit of a mouthfull, but you could add this to your select:
@{ Name="TotalDisk"; Expression={ ($_ | get-harddisk | measure-object -property CapacityKB -sum).Sum }}
This takes into account that a VM may have more than one hard disk. FWIW, this is taken from example 19 in the PowerShell Lab Manual
Also, if you want to modify that to use the tools information as Hal suggested, you could do this:
@{ Name="TotalDisk"; Expression={ ($_.guest.disks | measure-object -property Capacity -sum).Sum }}
This will give you a more accurate picture, assuming you have tools running.