Public/Set-SDPProblemTemplate.ps1

function Set-SDPProblemTemplate {
    <#
    .SYNOPSIS
        Updates a problem template in ServiceDesk Plus.
    .PARAMETER Id
        The ID of the template to update.
    .PARAMETER Name
        Updated template name.
    .PARAMETER Description
        Updated description.
    .PARAMETER AdditionalFields
        Hashtable of additional fields to merge into the request body.
    .EXAMPLE
        Set-SDPProblemTemplate -Id '5' -Name 'Network Outage Investigation v2'
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [string]$Id,

        [Parameter()]
        [string]$Name,

        [Parameter()]
        [string]$Description,

        [Parameter()]
        [hashtable]$AdditionalFields
    )

    process {
        $body = @{}

        if ($PSBoundParameters.ContainsKey('Name'))        { $body['name']        = $Name }
        if ($PSBoundParameters.ContainsKey('Description')) { $body['description'] = $Description }

        if ($AdditionalFields) {
            foreach ($key in $AdditionalFields.Keys) { $body[$key] = $AdditionalFields[$key] }
        }

        if ($PSCmdlet.ShouldProcess("Problem Template $Id", 'Update SDP Problem Template')) {
            $response = Invoke-SDPRestMethod -Endpoint "problem_templates/$Id" -Method PUT -Body @{ problem_template = $body }
            $response.problem_template
        }
    }
}