Inventory your Virtual Hard Disks in Windows Server 2012 Hyper-V

Overheard at my recent IT Pro events on Windows Server 2012 Hyper-V …

“After I’ve setup a number of VM’s, it’s easy to forget which virtual hard disk files are used by which VM’s.  How can I get a list of ALL virtual hard disks for ALL virtual machines on a Hyper-V Host?”

In this article, I’ll step through the process of generating an inventory of all virtual hard disks across all VM’s on a Hyper-V Host running Windows Server 2012 or our completely FREE Hyper-V Server 2012

Hyper-V PowerShell Module To The Rescue!

While the GUI-based Hyper-V Manager tool gives a view of VM settings on a VM-by-VM basis, the Hyper-V PowerShell module in Windows Server 2012 provides the capabilities to see configuration settings across all VM’s.  It all starts with the Get-VM PowerShell cmdlet, which provides us with a list of the currently provisioned VM’s on a Hyper-V Host …

Get-VM returns a collection of PowerShell objects for each and every VM that is currently provisioned on a Hyper-V host.  To see a specific set of configuration settings, such as Virtual Hard Disks, we can pipe the output of Get-VM to the appropriate PowerShell cmdlet related to a particular set of configuration settings.  In this case, we’ll pipe Get-VM’s output to the Get-VMHardDiskDrive PowerShell cmdlet …

If you’d like a scrollable, sortable GUI view of this output, simply pipe the above command line to the Out-GridView Powershell cmdlet, and you’ll receive a GUI display of the output as follows:

Alternatively, you could also pipe the command line output to the Export-Csv PowerShell cmdlet to generate a CSV text file with all of the details.  This could be useful if you want to work with these VHD files within another script.

What about other VM configuration items?

In addition to generating a list of all virtual hard disks across all VM’s, you can also leverage the same process as listed above to generate many other lists of configuration items just by substituting the appropriate PowerShell cmdlet in place of Get-VMHardDiskDrive.  Take a peek at the Get-VM* cmdlets on the Hyper-V Cmdlets page to get a full list of the information that you can leverage in this manner.  For example, to pull all virtual networks to which each VM is connected, you can use the Get-VMNetworkAdapter in the following PowerShell cmdline:

What’s Next? Keep Learning!

The best way to learn new technology is to setup your own lab environment and step through the new capabilities for yourself!  Our FREE “Early Experts” Challenge study group is a great way to jumpstart your learning in this manner.  “Early Experts” incorporates video-based lectures, structured study materials and hands-on labs that you build out in your own environment or in our Windows Azure cloud for FREE!

What’s Your Hyper-V Challenge?

Do you have information that you’ve been trying to pull out of Windows Server 2012 Hyper-V for better management of your VM’s? Leave your challenge below in the Comments and we can explore ways in which you can address your VM information needs!

Comments (2)
  1. Anonymous says:

    Hi Dan,

    On Windows 8, make sure you're launching PowerShell with the "Run As Administrator" option, otherwise the Hyper-V PowerShell Cmdlets won't return any results due to UAC.

    Hope this helps!


  2. Dan_IT says:

    So I tried this on W8 and it doesn't return any data.  Is that an expected result?  The W8 machine is a Hyper V host with 15 VMs configured and 2 of them running when I run the PS command.

Comments are closed.