Hyper-V

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.

Sponsored Content

Passwords Haven’t Disappeared Yet

123456. Qwerty. Iloveyou. No, these are not exercises for people who are brand new to typing. Shockingly, they are among the most common passwords that end users choose in 2021. Research has found that the average business user must manually type out, or copy/paste, the credentials to 154 websites per month. We repeatedly got one question that surprised us: “Why would I ever trust a third party with control of my network?

Related Topics:

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