Functions/Remove-AdbItemTemplate.ps1

<#
    .SYNOPSIS
        Remove the template name from a the adb item.
 
    .DESCRIPTION
        This command will query all existing templates on the adb item, merge
        them with the spcified template name and then update the new template
        list.
 
    .INPUTS
        None
 
    .OUTPUTS
        None
 
    .EXAMPLE
        PS C:\> Remove-AdmItemTemplate -Name 'myname' -Template 'mytpl'
        Remove the template mytpl from the item myname.
#>

function Remove-AdbItemTemplate
{
    [CmdletBinding(SupportsShouldProcess = $true)]
    param
    (
        # The adb session.
        [Parameter(Mandatory = $false)]
        [PSTypeName('Adb.Session')]
        [System.Object]
        $Session,

        # The item name.
        [Parameter(Mandatory = $true)]
        [System.String]
        $Name,

        # The template to remove from the item.
        [Parameter(Mandatory = $true)]
        [System.String]
        $Template
    )

    $Session = Test-AdbSession -Session $Session

    $item = Get-AdbItem -Session $Session -Name $Name

    # Prepare the template list
    $templates = [System.String[]] $item.templatesNames
    $templates = $templates | Where-Object { $_ -ne $Template } | Sort-Object

    $item = [PSCustomObject] @{
        name           = $Name
        templatesNames = $templates
    }

    $requestSplat = Get-AdbSessionRequestSplat -Session $Session -Method 'Put'
    $requestSplat['Uri'] = '{0}/items/{1}' -f $Session.Uri, $Name
    $requestSplat['Body'] = $item | ConvertTo-Json -Compress -Depth 99

    if ($PSCmdlet.ShouldProcess($requestSplat.Uri, $requestSplat.Method.ToUpper()))
    {
        Write-Verbose ('{0} {1} {2}' -f $requestSplat.Method.ToUpper(), $requestSplat.Uri, $requestSplat.Body)
        Invoke-RestMethod @requestSplat -Verbose:$false -ErrorAction 'Stop' | Out-Null
    }
}