Private/ConvertToCustomFieldValue.ps1

function ConvertToCustomFieldValue {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$BoardId,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [pscustomobject]$CustomFieldItem,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [pscustomobject[]]$BoardCustomFields = (Get-TrelloCustomField -BoardId $BoardId)
    )

    $ErrorActionPreference = 'Stop'

    if ('value' -in $CustomFieldItem.PSObject.Properties.Name) {
        if ('checked' -in $CustomFieldItem.value.PSObject.Properties.Name) {
            if ($CustomFieldItem.value.checked -eq 'true') {
                $true
            } else {
                $false
            }
        } elseif ('date' -in $CustomFieldItem.value.PSObject.Properties.Name) {
            $CustomFieldItem.value.date
        } else {
            $CustomFieldItem.value.text
        }
    } else {
        $boardField = $BoardCustomFields | Where { $_.id -eq $CustomFieldItem.idCustomField }
        if (-not $boardField) {
            throw "No board custom fields with ID $($CustomFieldItem.idCustomField) found on board ID $BoardId."
        }
        if ($CustomFieldItemValue = $boardField.options | where { $_.id -eq $CustomFieldItem.idValue }) {
            $CustomFieldItemValue.value.text
        }
    }
}