functions/public/Remove-KlippyPrinter.ps1
|
function Remove-KlippyPrinter { <# .SYNOPSIS Removes a Klipper printer from the local registry. .DESCRIPTION Removes a registered printer configuration from the KlippyCLI registry. Supports confirmation prompts and pipeline input. .PARAMETER Id The unique identifier of the printer to remove. .PARAMETER PrinterName The friendly name of the printer to remove. .PARAMETER InputObject A printer object from pipeline input. .PARAMETER Force Suppress confirmation prompt. .EXAMPLE Remove-KlippyPrinter -PrinterName "OldPrinter" Removes the printer named "OldPrinter" with confirmation. .EXAMPLE Remove-KlippyPrinter -PrinterName "OldPrinter" -Force Removes the printer without confirmation. .EXAMPLE Get-KlippyPrinter | Where-Object { $_.PrinterName -like "Test*" } | Remove-KlippyPrinter -Force Removes all printers with names starting with "Test". .OUTPUTS None #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'ByName')] param( [Parameter(Mandatory = $true, ParameterSetName = 'ById')] [ValidateNotNullOrEmpty()] [string]$Id, [Parameter(Mandatory = $true, ParameterSetName = 'ByName', Position = 0)] [ValidateNotNullOrEmpty()] [string]$PrinterName, [Parameter(Mandatory = $true, ParameterSetName = 'ByObject', ValueFromPipeline = $true)] [PSCustomObject]$InputObject, [Parameter()] [switch]$Force ) begin { $printers = Read-KlippyPrinterRegistry $printersToRemove = [System.Collections.Generic.List[string]]::new() } process { # Resolve target printer $resolveParams = @{ Printers = $printers } switch ($PSCmdlet.ParameterSetName) { 'ById' { $resolveParams['Id'] = $Id } 'ByName' { $resolveParams['PrinterName'] = $PrinterName } 'ByObject' { $resolveParams['InputObject'] = $InputObject } } try { $targetPrinter = Resolve-KlippyPrinterTarget @resolveParams } catch { Write-Error $_ return } $confirmMessage = "Remove printer '$($targetPrinter.PrinterName)' ($($targetPrinter.Uri))?" if ($Force -or $PSCmdlet.ShouldProcess($targetPrinter.PrinterName, "Remove printer")) { if (-not $Force -and -not $PSCmdlet.ShouldContinue($confirmMessage, "Confirm Removal")) { return } $printersToRemove.Add($targetPrinter.Id) Write-Verbose "Marked printer '$($targetPrinter.PrinterName)' for removal." } } end { if ($printersToRemove.Count -eq 0) { return } # Remove printers from collection $removedDefault = $false foreach ($printerId in $printersToRemove) { $printerToRemove = $printers | Where-Object { $_.Id -eq $printerId } if ($printerToRemove) { if ($printerToRemove.IsDefault) { $removedDefault = $true } $printers.Remove($printerToRemove) | Out-Null Write-Verbose "Removed printer '$($printerToRemove.PrinterName)'." } } # If we removed the default printer, set a new default if ($removedDefault -and $printers.Count -gt 0) { $printers[0].IsDefault = $true $printers[0].ModifiedAt = [datetime]::UtcNow Write-Warning "Default printer was removed. '$($printers[0].PrinterName)' is now the default." } # Save updated registry Write-KlippyPrinterRegistry -Printers $printers Write-Verbose "Registry updated. $($printersToRemove.Count) printer(s) removed." } } |