I have been searching for a way to get the HA protection status for VMs using PowerCLI but I haven't been able to find anything. I saw one way to do it with the VMA VM but I would rather use PowerCLI and PowerShell.
Thanks in advance for your help.
You mean something like this ?
$cluster = Get-Cluster MyCluster
Write-Host "Default VM restart" $cluster.HARestartPriority
if($cluster.ExtensionData.Configuration.DasVmConfig){ $cluster.ExtensionData.Configuration.DasVmConfig | %{ Write-Host "VM" (Get-View $_.Key).Name "Restart priority" $_.RestartPriority
} }
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
LucD, thanks but that's not what I am looking for, that's the HA restart priority. I am looking for the Unprotected/Protected status of HA for my VMs. I have a couple VMs that are Unprotected and I want to get that into a report but I can't seem to find any command to get this status.
Yes sir, that would be the information that I am looking for, is there a way to get that through PowerCLI?
Try this:
get-view -ViewType "VirtualMachine" -Filter @{"Summary.Runtime.DasVmProtection.DasProtected" = "true"} | Select Name
It should return the names of all VMs where the vSphere HA Protection status is Protected.
Hope this helps.
Hersey
Try this
Get-Cluster MyCluster | Get-VM |
where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected} |
Select Name,@{N="Protected";E={$_.ExtensionData.Runtime.DasVmProtection.DasProtected}}
The Where-clause is there to filter out the VMs that are powered off.
If you only want the ones that are not proctected, then you could add an extra condition to the Where-clause
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
This is funny, but I just come here to post a simlar message, looking on how to do this too.
Because I'd like to get a report via email that will show if any VMs are not currently protected in my environment.
I'll try this two commands and see how they work for me.
Thanks,
-Mike
To show only the VMs that are not protected by HA you can use this:
Get-VM | where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected -ne "true"} | select Name
Hersey
Hi berkman
Did you get the first PS to work for you, I did not, but the second one did, it reported back the protected status as True.
So Guys my thoguhts are will this work as I think, or will we need to cross check that all of our VMs are listed here.
So if a VM is unprotected, the where clause will not work to only find VMs that are currently not protected.
Maybe we should change it to Unprotected machines, currently I do not have any VMs unprotected so its hard to test, does anyone know how I can unprotected a selected VM for testing.
Thanks,
-Mike
Thought you could do this by disabling the VM Restart Priority under Virtual Machine Options is cluster settings but when I do this the VM still shows protected???
It should not display protected if restart priority has been set to disabled but it does.
Hersey
If you power on a poweroff VM, it will show Protected equals $false for a couple of seconds.
The VMs that are powered off do not have the property, hence the condition in my Where-clause.
For the ones that are powered on, you will get $true or $false.
If you only want the VMs that are not protected, it suffices to add an extra condition in the Where-clause.
Get-Cluster MyCluster | Get-VM | where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected -and !$_.ExtensionData.Runtime.DasVmProtection.DasProtected} | Select Name,@{N="Protected";E={$_.ExtensionData.Runtime.DasVmProtection.DasProtected}}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thanks LucD, nice work, that will do it.
Take Care,
-Mike
That didn't work for me but it got me close enough to get this:
Get-Cluster "MyCluster" |
Get-VM |
where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected -ne "True"} |
Select Name,@{N="Protected";E={$_.ExtensionData.Runtime.DasVmProtection.DasProtected}}
Thanks LucD and everyone else.
Berkman,
So did it report back correclty, because I do not have any VMs that are not unprotected, so I would like to know, that if I did it would show them to me.
Also, what report are you adding them to, like to daily emailed report.
Thanks,
-Mike
Yes, it reported back correctly but also included powered off VMs because the DasProtected value doesn't exist for powered off VMs so I added a where filter:
Get-Cluster "MyCluster" |
Get-VM |
where {$_.PowerState -ne "PoweredOff"} |
where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected -ne "True"} |
Select Name,@{N="Protected";E={$_.ExtensionData.Runtime.DasVmProtection.DasProtected}}
Yes, I am inlcuding this in my daily report email.
How did you test? Are you able to get a VM to report Unprotected? If so, what did you do?
Thanks
Hersey
I have been able to test successfully because I have a couple VMs that are currently Unprotected. That's why I started to try to get this info into my daily report.
I moved these VMs from one cluster to another and this caused the HA status to go Unprotected. Try that, it should work to get a VM Unprotected.
I guess the point is if the VM does not meet the requirements to be protected, what is the point of reporting on it?
VM with restart priority set to disabled is unprotected yet it reports protected. Script does not really provide valid/useful results.
Hersey
Hi LucD,
If I wanted to have it only show not show powered On VMs, how would l modify the -and! line
$Report = Get-Cluster MyCluster | Get-VM | Sort-Object |
where {$_.ExtensionData.Runtime.DasVmProtection.DasProtected -ne "True"} |
Select Name,@{N="Protected";E={$_.ExtensionData.Runtime.DasVmProtection.DasProtected}} -and !
where{$_.powerstate -eq "PoweredOn"} | Out-String
Here is the output now:
Name Protected
---- ---------
Test1
Test2
Both of these VMs are turned off, so I do not want it to show these, also if I update the script, and no VMs are false, will the script fail, because of a null value?
Thanks,
-Mike