functions/public/Get-KlippyMoonrakerInfo.ps1

function Get-KlippyMoonrakerInfo {
    <#
    .SYNOPSIS
        Gets Moonraker server information from a Klipper printer.

    .DESCRIPTION
        Retrieves Moonraker server details including version, API version,
        registered components, and connection status.

    .PARAMETER Id
        The unique identifier of the printer.

    .PARAMETER PrinterName
        The friendly name of the printer.

    .PARAMETER InputObject
        A printer object from pipeline input.

    .EXAMPLE
        Get-KlippyMoonrakerInfo
        Gets Moonraker info from the default printer.

    .EXAMPLE
        Get-KlippyMoonrakerInfo -PrinterName "voronv2"
        Gets Moonraker info from the specified printer.

    .EXAMPLE
        Get-KlippyPrinter | Get-KlippyMoonrakerInfo
        Gets Moonraker info from all registered printers.

    .OUTPUTS
        PSCustomObject with Moonraker server information.
    #>

    [CmdletBinding(DefaultParameterSetName = 'Default')]
    [OutputType([PSCustomObject])]
    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
    )

    process {
        # Resolve printer
        $resolveParams = @{}
        switch ($PSCmdlet.ParameterSetName) {
            'ById' { $resolveParams['Id'] = $Id }
            'ByName' { $resolveParams['PrinterName'] = $PrinterName }
            'ByObject' { $resolveParams['InputObject'] = $InputObject }
        }

        $printer = Resolve-KlippyPrinterTarget @resolveParams

        try {
            Write-Verbose "[$($printer.PrinterName)] Fetching Moonraker info..."

            $serverInfo = Invoke-KlippyJsonRpc -Printer $printer -Method "server/info"

            [PSCustomObject]@{
                PSTypeName           = 'KlippyCLI.MoonrakerInfo'
                PrinterId            = $printer.Id
                PrinterName          = $printer.PrinterName
                KlippyConnected      = $serverInfo.KlippyConnected
                KlippyState          = $serverInfo.KlippyState
                MoonrakerVersion     = $serverInfo.MoonrakerVersion
                ApiVersion           = $serverInfo.ApiVersion
                ApiVersionText       = $serverInfo.ApiVersionText
                Components           = $serverInfo.Components
                FailedComponents     = $serverInfo.FailedComponents
                RegisteredDirectories = $serverInfo.RegisteredDirectories
                Warnings             = $serverInfo.Warnings
            }
        }
        catch {
            Write-Error "[$($printer.PrinterName)] Failed to get Moonraker info: $_"
        }
    }
}