JFCooleBA
Contributor
Contributor

Glad it was helpful. Smiley Happy

Here's a quick and dirty PowerCLI snippet I wrote to save me the clicks. It certainly has room for improvement so feel free to use it.

function Get-VMHostProfileComplianceVerbose {

    param(

        [Parameter(Mandatory=$true)][VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl]$VMHost,

        [VMware.VimAutomation.ViCore.Types.V1.Host.Profile.VMHostProfile]$HostProfile

    )

  

    # Execute the compliance task.

    try {

        $Task = $HostProfile.ExtensionData.CheckProfileCompliance_Task($VMHost.ExtensionData.MoRef)

        $TaskObject = Get-VIObjectByVIView -MORef $Task

        Wait-Task -Task (Get-Task -Id $TaskObject.Id)

        $Results = $TaskObject.ExtensionData.Info.Result

    } catch {

        Write-Information -MessageData "There was an error running the compliance task: $($Error[0].Exception)" -InformationAction Continue

        break

    }

    $Output = @()

    # Check if it's compliant or not.

    if($Results.Count -eq 1 -and $Results[0].ComplianceStatus -eq "compliant") {

        Write-Information -MessageData "This Host is compliant." -InformationAction Continue

        break

    } else {

        $Failures = $Results[0].Failure

        foreach($Failure in $Failures) {

            # Check for the failures and make them more readable!

            $Type = $Failure.FailureType.split(".")[$Failure.FailureType.split(".").count-1]

            $Message = $Failure.Message.Message

            $Output += "Compliance Failure Type: $Type, Message: $Message"

        }

    }

    return $Output

}