Private/Remove-AutopilotDevice.ps1

function Remove-AutopilotDevice {
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [string]$DeviceName,
        [string]$SerialNumber = $null
    )

    $AutopilotDevice = Get-AutopilotDevice -DeviceName $DeviceName -SerialNumber $SerialNumber

    if (-not $AutopilotDevice) {
        Write-ColorOutput " - Autopilot (not found)" "Yellow"
        return @{ Success = $false; Found = $false; Error = "Device not found" }
    }

    try {
        $uri = "https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities/$($AutopilotDevice.id)"

        if ($PSCmdlet.ShouldProcess("$($AutopilotDevice.displayName) (Serial: $($AutopilotDevice.serialNumber))", "Remove from Autopilot")) {
            Invoke-MgGraphRequest -Uri $uri -Method DELETE
            Write-ColorOutput " ✓ Autopilot" "Green"
        } else {
            Write-ColorOutput "WHATIF: Would remove Autopilot device: $($AutopilotDevice.displayName) (Serial: $($AutopilotDevice.serialNumber))" "Yellow"
        }
        return @{ Success = $true; Found = $true; Error = $null }
    }
    catch {
        $errorMsg = $_.Exception.Message

        # Check for common deletion scenarios
        if ($errorMsg -like "*BadRequest*" -or $errorMsg -like "*Bad Request*") {
            if ($errorMsg -like "*already*" -or $errorMsg -like "*pending*") {
                Write-ColorOutput "⚠ Device $SerialNumber already queued for deletion from Autopilot" "Yellow"
                return @{ Success = $true; Found = $true; Error = "Already queued for deletion" }
            } else {
                Write-ColorOutput "⚠ Device $SerialNumber cannot be deleted from Autopilot (may already be processing)" "Yellow"
                Write-ColorOutput " Error details: $errorMsg" "Gray"
                return @{ Success = $true; Found = $true; Error = "Cannot delete - likely already processing" }
            }
        }
        elseif ($errorMsg -like "*NotFound*" -or $errorMsg -like "*Not Found*") {
            Write-ColorOutput "⚠ Device $SerialNumber no longer exists in Autopilot (already removed)" "Yellow"
            return @{ Success = $true; Found = $true; Error = "Already removed" }
        }
        else {
            Write-ColorOutput "✗ Error removing device $SerialNumber from Autopilot: $errorMsg" "Red"
            return @{ Success = $false; Found = $true; Error = $errorMsg }
        }
    }
}