VeeamON 2021: Free Online Conference - Register Now VeeamON 2021: Free Online Conference - Register Now

Testing Hyper-V Disk Health

I use Hyper-V extensively to provide a domain environment that serves as my training and test playground. And because my environment has to be portable, I tend to run into more problems than hopefully you do. However, you might still benefit from experiences and maybe you will learn something about PowerShell along the way. If a virtual machine is already running, I’m not too concerned about it. Instead, I need a heads up on all my other virtual machines, especially if there is a problem that would keep them from starting.

Using the Hyper-V module, grabbing all virtual machines is pretty easy.

Getting virtual machine status (Image Credit: Jeff Hicks)
Getting virtual machine status (Image Credit: Jeff Hicks)

As you can see, I have one virtual machine with a critical problem, which is because the virtual machine configuration file is missing or corrupt. The configuration file is an XML file named with the virtual machine’s ID. I can confirm that the file is missing.


Listing configuration file locations (Image Credit: Jeff Hicks)
Listing configuration file locations (Image Credit: Jeff Hicks)

That’s a pretty easy thing to check and fix. What’s a bit harder is verifying that the virtual disk files, which include vhd and vhdx files, are all in place. I can easily see what the files should be.

Listing virtual machine disk files (Image Credit: Jeff Hicks)
Listing virtual machine disk files (Image Credit: Jeff Hicks)

But unless the virtual machine is running without error, I really don’t know. One thing I can do is test each path.


Listing virtual machines with invalid disk files (Image Credit: Jeff Hicks)
Listing virtual machines with invalid disk files (Image Credit: Jeff Hicks)

Or perhaps I want to check all virtual machines and insert a custom property that indicates if virtual disks exist.


Adding a custom property (Image Credit: Jeff Hicks)
Adding a custom property (Image Credit: Jeff Hicks)

There is one slight wrinkle with this approach. The virtual machine called demo doesn’t have any virtual disks defined, so I don’t get any results. Let me refine the command to take this into account.


Better handling of missing disk files (Image Credit: Jeff Hicks)
Better handling of missing disk files (Image Credit: Jeff Hicks)

That’s better. Although for virtual machines with multiple disk files, my custom property is an array, as you can see for Nano-01. Eventually I want to get to a point where I can filter on the TestVHD property. For my purposes, all disks must test as true, otherwise I’ll treat the entire test as a failure. Here’s how I might accomplish this:


I initialize a variable, $test, to hold the values from Test-Path. Next, I test using the –Contains operator to see if $test has any values of $False. If so, then the value for TestVHD should be false.

Testing for multiple disk files (Image Credit: Jeff Hicks)
Testing for multiple disk files (Image Credit: Jeff Hicks)

That’s much better. Now I can get a better feel for what virtual machines need attention.


In this example, I am also grabbing the paths of each virtual disk file.

Listing problem virtual machines (Image Credit: Jeff Hicks)
Listing problem virtual machines (Image Credit: Jeff Hicks)

Although that’s helpful information, that’s a lot to type each time I want to test. In another article, I’ll demonstrate how to take this a step further. As always, comments and questions are welcome.

Related Topics:

  • Hyper-V
  • BECOME A PETRI MEMBER:

    Don't have a login but want to join the conversation? Sign up for a Petri Account

    Register
    Comments (0)

    Leave a Reply

    Free Online Conference - May 25th and 26th

    VeeamON 2021: Free Online Conference

    Join us to gain your professional edge with technical and visionary learning from the brightest minds in IT at the definitive conference for Modern Data Protection.

    Register Now

    Sponsored By