internal/functions/Confirm-PolicyDefinitionsParametersMatch.ps1

function Confirm-PolicyDefinitionsParametersMatch {
    [CmdletBinding()]
    param(
        $ExistingParametersObj,
        $DefinedParametersObj
    )

    if ($null -eq $ExistingParametersObj) {
        $ExistingParametersObj = @{}
    }
    if ($null -eq $DefinedParametersObj) {
        $DefinedParametersObj = @{}
    }
    $addedParameters = $DefinedParametersObj.Clone()
    foreach ($existingParameterName in $ExistingParametersObj.Keys) {
        $definedParameterNameArray = $DefinedParametersObj.Keys -eq $existingParameterName
        if ($definedParameterNameArray.Count -gt 0) {
            # remove key from $addedParameters
            $addedParameters.Remove($definedParameterName)

            # analyze parameter
            $existing = $ExistingParametersObj.$existingParameterName
            $defined = $DefinedParametersObj.$definedParameterName
            $match = Confirm-ObjectValueEqualityDeep $existing $defined
            if (!$match) {
                return $false
            }
        }
        else {
            # parameter deleted
            return $false
        }
    }

    # if condition instead of just returning the bool value is for easier debugging
    if ( $addedParameters.psbase.Count -eq 0) {
        # full match
        return $true
    }
    else {
        # parameter added
        return $false
    }
}