public/release/Add-PSTSReleaseDefinitionVariable.ps1

function Add-PSTSReleaseDefinitionVariable
{
    param(
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][object[]] $variables,
        [Parameter(ValueFromPipelineByPropertyName = $true)][bool] $append,
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][object] $releaseDefinition
    )

    process {

        foreach ($varkey in $variables.Keys) {

            if ($null -ne $releaseDefinition.Variables.($varkey)) {
                if ($append -eq $true) {
                     $releaseDefinition.Variables.($varkey).value = "{0} {1}" -f $releaseDefinition.Variables.($varkey).value, $variables.($varkey)
                }
                else {
                    $releaseDefinition.Variables.($varkey).value = $variables.($varkey)
                }
            }
            else
            {
                $var = [pscustomobject]@{value = $variables.($varkey)}

                $releaseDefinition.Variables | Add-Member -NotePropertyName $varkey -NotePropertyValue $var
            }
        }

        return $releaseDefinition
    }
}