Private/Get-CMxInstallState.ps1

function Get-CMxInstallState {
    param (
        [parameter(Mandatory=$True)]
            [ValidateNotNullOrEmpty()]
            [string] $PackageName,
        [parameter(Mandatory=$True)]
            [ValidateNotNullOrEmpty()]
            [string] $RuleType, 
        [parameter(Mandatory=$True)]
            [ValidateNotNullOrEmpty()]
            [string] $RuleData
    )
    Write-Log -Category "info" -Message "[function: Get-CMxInstallState]"
    Write-Log -Category "info" -Message "detection type = $RuleType"
    Write-Log -Category "info" -Message "detection rule = $RuleData"
    switch ($RuleType.ToLower()) {
        'automatic' {
            $result = (Test-Path $RuleData)
            break
        }
        'synthetic' {
            $detPath = "$RuleData\$PackageName"
            Write-Log -Category "info" -Message "detection rule = $detPath"
            $result  = (Test-Path $detPath)
            break
        }
        'feature' {
            try {
                $result = ((Get-WindowsFeature $RuleData | Select-Object -ExpandProperty Installed) -eq $True)
            }
            catch {}
            break
        }
    }
    Write-Log -Category "info" -Message "function result = $result"
    Write-Output $result
}