Checking Virtual Machine Health After a Disaster

Last weekend I suffered a human disaster in my “server room”.  Which is to say that I knocked down a shelf in my garage and accidentally disconnected the UPS.  This, in turn turned off all of my hardware.  An hour later I had fixed the shelf, reconnected all the wiring and had booted the servers again. I then had to make sure all the virtual machines were up and running.  I had some problems, because one disk array did not come online automatically, but after a bit of cajoling I believed everything was good. 

However, when you are using Hyper-V Replica this can be a bit tricky to check.  You see, I have two copies of every virtual machine and one should always be off.  After switching between my two servers a couple of times to try and check the status – I decided to go to PowerShell.

Now I had a quandary. How could I check the state of all the virtual machines that should be running, while not looking at the virtual machines that should be off?  The answer soon came to me:

get-vm -computername Hyper-V-1, Hyper-V-2 | ?{$_.ReplicationMode -ne “Replica”}

“Hyper-V-1” and “Hyper-V-2” are my two Hyper-V servers (creative names, I know).  And this command returns the status of every virtual machine that is not a replica.  I then checked the replication health of just the replica virtual machines with this command:

get-vm -computername Hyper-V-1, Hyper-V-2 | ?{$_.ReplicationMode -eq “Replica”} | select Name, ReplicationState, ReplicationHealth

Which gave me these results:

With that all done – I could get back to working in my garage.