Today I needed to grab some quick information on my hosts, which hosts had host profiles enabled, if they were compliant and if not what where the issues ?
With the below script I was easily able to grab this information, as can be seen in the screenshot below:
The Script
$HPDetails = @() Foreach ($VMHost in Get-VMHost) { $HostProfile = $VMHost | Get-VMHostProfile if ($VMHost | Get-VMHostProfile) { $HP = $VMHost | Test-VMHostProfileCompliance If ($HP.ExtensionData.ComplianceStatus -eq "nonCompliant") { Foreach ($issue in ($HP.IncomplianceElementList)) { $Details = "" | Select VMHost, Compliance, HostProfile, IncomplianceDescription $Details.VMHost = $VMHost.Name $Details.Compliance = $HP.ExtensionData.ComplianceStatus $Details.HostProfile = $HP.VMHostProfile $Details.IncomplianceDescription = $Issue.Description $HPDetails += $Details } } Else { $Details = "" | Select VMHost, Compliance, HostProfile, IncomplianceDescription $Details.VMHost = $VMHost.Name $Details.Compliance = "Compliant" $Details.HostProfile = $HostProfile.Name $Details.IncomplianceDescription = "" $HPDetails += $Details } } Else { $Details = "" | Select VMHost, Compliance, HostProfile, IncomplianceDescription $Details.VMHost = $VMHost.Name $Details.Compliance = "No profile attached" $Details.HostProfile = "" $Details.IncomplianceDescription = "" $HPDetails += $Details } } $HPDetails
s
s
Thank you Alan!
We are running vsphere 4.1 at my work.
In some case we do not see the HostProfile name and i get a “NonCompliant” in the column Compliance. To fix that, I had to replace the following line:
$Details.HostProfile = $HP.VMHostProfile
by:
if ($HP.VMHostProfile -eq $null) {$Details.HostProfile = $HostProfile.Name}
else {$Details.HostProfile = $HP.VMHostProfile}