Private/Value.ps1

function Test-HLValue {
    [CmdletBinding()]
    param(
        [AllowNull()]
        [object]$Actual,

        [AllowNull()]
        [object]$Expected,

        [Parameter(Mandatory)]
        [ValidateSet('Equals', 'NotEquals', 'In', 'NotIn', 'GreaterOrEqual', 'LessOrEqual', 'ContainsAll')]
        [string]$Operator
    )

    switch ($Operator) {
        'Equals' {
            return $Actual -eq $Expected
        }
        'NotEquals' {
            return $Actual -ne $Expected
        }
        'In' {
            return $Actual -in @($Expected)
        }
        'NotIn' {
            return $Actual -notin @($Expected)
        }
        'GreaterOrEqual' {
            if ($null -eq $Actual) { return $false }
            return [double]$Actual -ge [double]$Expected
        }
        'LessOrEqual' {
            if ($null -eq $Actual) { return $false }
            return [double]$Actual -le [double]$Expected
        }
        'ContainsAll' {
            $actualItems = @($Actual | ForEach-Object { [string]$_ })
            foreach ($item in @($Expected)) {
                if ([string]$item -notin $actualItems) {
                    return $false
                }
            }
            return $true
        }
    }
}

function Get-HLValueProbeResult {
    [CmdletBinding()]
    param(
        [AllowNull()]
        [object]$Actual,

        [AllowNull()]
        [object]$Expected,

        [Parameter(Mandatory)]
        [string]$Operator,

        [AllowNull()]
        [object[]]$WarningValues,

        [string]$SuccessMessage = 'The effective value matches the baseline.',

        [string]$FailureMessage = 'The effective value does not match the baseline.',

        [AllowNull()]
        [object]$Evidence = $null
    )

    if (Test-HLValue -Actual $Actual -Expected $Expected -Operator $Operator) {
        return Get-HLProbeResult -Status Pass -Expected $Expected -Actual $Actual -Message $SuccessMessage -Evidence $Evidence
    }

    if ($null -ne $WarningValues -and $Actual -in @($WarningValues)) {
        return Get-HLProbeResult -Status Warning -Expected $Expected -Actual $Actual -Message 'The control is in audit or warning mode and is not fully enforced.' -Evidence $Evidence
    }

    return Get-HLProbeResult -Status Fail -Expected $Expected -Actual $Actual -Message $FailureMessage -Evidence $Evidence
}