Public/Close-SDPProblem.ps1

function Close-SDPProblem {
    <#
    .SYNOPSIS
        Closes one or more problems in ServiceDesk Plus.
    .PARAMETER Id
        One or more problem IDs to close.
    .PARAMETER ClosureCodeName
        Name of the closure code to apply.
    .PARAMETER Comments
        Optional closure comments.
    .EXAMPLE
        Close-SDPProblem -Id '12345'
    .EXAMPLE
        Close-SDPProblem -Id '12345' -ClosureCodeName 'Resolved' -Comments 'Root cause eliminated.'
    #>

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

        [Parameter()]
        [string]$ClosureCodeName,

        [Parameter()]
        [string]$Comments
    )

    process {
        $body = @{}
        if ($PSBoundParameters.ContainsKey('ClosureCodeName')) { $body['closure_code']     = @{ name = $ClosureCodeName } }
        if ($PSBoundParameters.ContainsKey('Comments'))        { $body['closure_comments'] = $Comments }

        foreach ($problemId in $Id) {
            if ($PSCmdlet.ShouldProcess("Problem $problemId", 'Close SDP Problem')) {
                $params = @{ Endpoint = "problems/$problemId/close"; Method = 'PUT' }
                if ($body.Count -gt 0) { $params['Body'] = @{ problem = $body } }
                Invoke-SDPRestMethod @params
            }
        }
    }
}