Public/System/Get-VergeVersion.ps1

function Get-VergeVersion {
    <#
    .SYNOPSIS
        Retrieves VergeOS system version information.

    .DESCRIPTION
        Get-VergeVersion retrieves version information from a VergeOS system,
        including the VergeOS version, kernel version, vSAN version, and other
        component versions. By default returns information from the first online node.

    .PARAMETER Server
        The VergeOS connection to use. Defaults to the current default connection.

    .EXAMPLE
        Get-VergeVersion

        Retrieves version information from the connected VergeOS system.

    .EXAMPLE
        Get-VergeVersion | Format-List

        Displays all version details in list format.

    .OUTPUTS
        PSCustomObject with PSTypeName 'Verge.Version'

    .NOTES
        Version information is retrieved from the first online node in the cluster.
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter()]
        [object]$Server
    )

    begin {
        # Resolve connection
        if (-not $Server) {
            $Server = $script:DefaultConnection
        }
        if (-not $Server) {
            throw [System.InvalidOperationException]::new(
                'Not connected to VergeOS. Use Connect-VergeOS to establish a connection.'
            )
        }
    }

    process {
        try {
            Write-Verbose "Querying version information from $($Server.Server)"

            # Get version info from nodes - we want the first online node
            $queryParams = @{
                fields = @(
                    '$key'
                    'name'
                    'yb_version'
                    'os_version'
                    'kernel_version'
                    'appserver_version'
                    'vsan_version'
                    'qemu_version'
                    'machine#status#running as running'
                ) -join ','
                sort   = '+$key'
                limit  = '1'
            }

            $response = Invoke-VergeAPI -Method GET -Endpoint 'nodes' -Query $queryParams -Connection $Server

            # Handle response
            $node = if ($response -is [array]) { $response[0] } else { $response }

            if (-not $node) {
                throw [System.InvalidOperationException]::new('No nodes found in the VergeOS system.')
            }

            # Create output object
            $output = [PSCustomObject]@{
                PSTypeName        = 'Verge.Version'
                VergeOSVersion    = $node.yb_version
                OSVersion         = $node.os_version
                KernelVersion     = $node.kernel_version
                AppServerVersion  = $node.appserver_version
                vSANVersion       = $node.vsan_version
                QEMUVersion       = $node.qemu_version
                SourceNode        = $node.name
                Server            = $Server.Server
            }

            # Add hidden connection property
            $output | Add-Member -MemberType NoteProperty -Name '_Connection' -Value $Server -Force

            Write-Output $output
        }
        catch {
            $PSCmdlet.ThrowTerminatingError($_)
        }
    }
}