public/Get-OsQuerySystemInfo.ps1

function Get-OsQuerySystemInfo {
    <#
    .SYNOPSIS
        Retrieves system hardware and OS information from osquery.
    .DESCRIPTION
        Queries 'system_info' for hardware details (hostname, CPU, memory, hardware model)
        and 'os_version' for OS details, then merges them into a single object per host.
    .PARAMETER ComputerName
        Remote computer to query. If not provided, queries locally.
    .EXAMPLE
        Get-OsQuerySystemInfo

        Returns a merged hardware and OS summary for the local machine.
    .EXAMPLE
        Get-OsQuerySystemInfo -ComputerName "server01"

        Returns system info for the remote computer "server01".
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$false)][string]$ComputerName
    )
    $invokeParams = @{}
    if (![string]::IsNullOrEmpty($ComputerName)) { $invokeParams.ComputerName = $ComputerName }

    $sysInfo = Invoke-OsQueryTableQuery -Query "SELECT * FROM system_info;" @invokeParams
    $osInfo  = Invoke-OsQueryTableQuery -Query "SELECT * FROM os_version;" @invokeParams

    if ($sysInfo -and $osInfo) {
        $merged = $sysInfo | Select-Object -Property *
        $osProps = $osInfo | Select-Object -ExcludeProperty name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name
        foreach ($prop in $osProps) {
            $merged | Add-Member -NotePropertyName "os_$prop" -NotePropertyValue $osInfo.$prop -Force
        }
        $merged
    } else {
        $sysInfo
    }
}