Public/Get/Get-HaloObjectTemplate.ps1

#Requires -Version 7
function Get-HaloObjectTemplate {
    <#
        .SYNOPSIS
            Gets an object template for the Halo API.
        .DESCRIPTION
            Provides an example object for use in provisioning items in the Halo API
        .OUTPUTS
            A powershell object containing the response.
    #>

    [CmdletBinding( DefaultParameterSetName = 'Multi' )]
    [OutputType([PSCustomObject])]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification = 'Uses dynamic parameter parsing.')]
    Param(
        # Type of object to get template for
        [Parameter( Mandatory = $True )]
        [ValidateSet(
            'Action',
            'Agent',
            'Appointment',
            'Article',
            'Asset',
            'Attachment',
            'Client',
            'CustomButton',
            'Invoice',
            'Item',
            'KBArticle',
            'Opportunity',
            'Project',
            'Quote',
            'Report',
            'Site',
            'Status',
            'Supplier',
            'Team',
            'Ticket',
            'TicketType',
            'User'
        )]
        [String]$Type,
        # Return with null values
        [switch]$NullVariables
    )
    try {
        # Handle types with aliases/multiple names.
        if ($Type -eq 'Article') {
            $Type = 'KBArticle'
        }
        # Fetch the object from a template json file in the data directory
        $TemplateObject = Get-Content "$PSScriptRoot/../../Data/Templates/$Type.json" -Raw | ConvertFrom-Json -Depth 100
        # If null variables were requested null them all
        if ($NullVariables) {
            $ReturnObject = Get-HaloNullObject -NullObject $TemplateObject
        } else {
            $ReturnObject = $TemplateObject
        }

        return $ReturnObject
    } catch {
        $Command = $CommandName -Replace '-', ''
        $ErrorRecord = @{
            ExceptionType = 'System.Exception'
            ErrorMessage = "$($CommandName) failed."
            InnerException = $_.Exception
            ErrorID = "Halo$($Command)CommandFailed"
            ErrorCategory = 'ReadError'
            TargetObject = $_.TargetObject
            ErrorDetails = $_.ErrorDetails
            BubbleUpDetails = $True
        }
        $CommandError = New-HaloErrorRecord @ErrorRecord
        $PSCmdlet.ThrowTerminatingError($CommandError)
    }
}