Public/Certificates/Remove-JIMCertificate.ps1

function Remove-JIMCertificate {
    <#
    .SYNOPSIS
        Removes a certificate from JIM's trusted certificate store.
 
    .DESCRIPTION
        Permanently deletes a certificate from the trusted certificate store.
 
    .PARAMETER Id
        The unique identifier (GUID) of the certificate to delete.
 
    .PARAMETER InputObject
        Certificate object to delete (from pipeline).
 
    .PARAMETER Force
        Suppresses confirmation prompts.
 
    .PARAMETER PassThru
        If specified, returns the deleted certificate object.
 
    .OUTPUTS
        If -PassThru is specified, returns the deleted certificate object.
 
    .EXAMPLE
        Remove-JIMCertificate -Id $certId
 
        Removes the certificate (prompts for confirmation).
 
    .EXAMPLE
        Remove-JIMCertificate -Id $certId -Force
 
        Removes the certificate without confirmation.
 
    .EXAMPLE
        Get-JIMCertificate | Where-Object { $_.name -like "Test*" } | Remove-JIMCertificate -Force
 
        Removes all certificates with names starting with "Test".
 
    .LINK
        Get-JIMCertificate
        Add-JIMCertificate
        Set-JIMCertificate
    #>

    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'ById')]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)]
        [Guid]$Id,

        [Parameter(Mandatory, ParameterSetName = 'ByInputObject', ValueFromPipeline)]
        [PSCustomObject]$InputObject,

        [switch]$Force,

        [switch]$PassThru
    )

    process {
        # Check connection first
        if (-not $script:JIMConnection) {
            Write-Error "Not connected to JIM. Use Connect-JIM first."
            return
        }

        $certId = if ($InputObject) { $InputObject.id } else { $Id }

        # Get the certificate first for confirmation message and PassThru
        $existing = $null
        try {
            $existing = Invoke-JIMApi -Endpoint "/api/v1/certificates/$certId"
        }
        catch {
            Write-Error "Certificate not found: $certId"
            return
        }

        if ($Force -or $PSCmdlet.ShouldProcess($existing.name, "Delete Certificate")) {
            Write-Verbose "Deleting certificate: $certId"

            try {
                Invoke-JIMApi -Endpoint "/api/v1/certificates/$certId" -Method 'DELETE'

                Write-Verbose "Deleted certificate: $certId"

                if ($PassThru) {
                    $existing
                }
            }
            catch {
                Write-Error "Failed to delete certificate: $_"
            }
        }
    }
}