public/release/Get-PSTSReleaseDefinitionTaskTemplate.ps1

function Get-PSTSReleaseDefinitionTaskTemplate
{
    [CmdletBinding(DefaultParameterSetName="inline")]
    param(
        [Parameter(Mandatory=$true)][string] $taskId,
        [Parameter(Mandatory=$true)][string] $name,
        [Parameter(Mandatory=$true)][hashtable] $inputs

    )

    process {


        $task = Get-PSTSReleaseDefinitionTask `
           -id $taskId  |  `
        Sort-Object `
           -Property @{Expression = { $_.version.major }; Descending = $False} | `
        Select-Object `
           -Last 1

        if ($null -eq $task) { return $null }

        $template = [ReleaseDefinitionTaskTemplate]::new(`
            $taskId, `
            "{0}.*" -f $task.version.major `
        )

        $template.name = $name
        $template.enabled = $true
        $template.inputs = New-Object `
        -TypeName PSObject

        $task.inputs |Foreach-Object -Process {

            $inputValue = $inputs[$_.name]

            $template.inputs | `
            Add-Member `
               -NotePropertyName $_.name `
               -NotePropertyValue $(iif $inputValue $inputValue $_.defaultValue)
        }

        return $template
    }
}