public/Get-OsQueryInstalledPackages.ps1

function Get-OsQueryInstalledPackages {
    <#
    .SYNOPSIS
        Retrieves installed package information from osquery.
    .DESCRIPTION
        Queries the appropriate platform package table (deb_packages, rpm_packages,
        chocolatey_packages, or homebrew_packages). Auto-detects the package manager
        based on the current platform unless overridden with -PackageManager.
    .PARAMETER PackageManager
        Package manager to query. If not specified, auto-detects based on platform:
        Linux -> deb, Windows -> chocolatey, macOS -> homebrew.
    .PARAMETER Limit
        Maximum number of records to return. Default is 0 (all).
    .PARAMETER ComputerName
        Remote computer to query. If not provided, queries locally.
    .EXAMPLE
        Get-OsQueryInstalledPackages

        Returns installed packages using the auto-detected package manager.
    .EXAMPLE
        Get-OsQueryInstalledPackages -PackageManager rpm -Limit 50

        Returns up to 50 packages from the rpm_packages table.
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$false)]
        [ValidateSet('deb', 'rpm', 'chocolatey', 'homebrew', 'python')]
        [string]$PackageManager,
        [parameter(Mandatory=$false)][int]$Limit = 0,
        [parameter(Mandatory=$false)][string]$ComputerName
    )
    if ([string]::IsNullOrEmpty($PackageManager)) {
        $PackageManager = if ($IsWindows) { 'chocolatey' } elseif ($IsMacOS) { 'homebrew' } else { 'deb' }
    }
    $tablename = switch ($PackageManager) {
        'deb'        { 'deb_packages' }
        'rpm'        { 'rpm_packages' }
        'chocolatey' { 'chocolatey_packages' }
        'homebrew'   { 'homebrew_packages' }
        'python'     { 'python_packages' }
    }
    $query = if ($Limit -gt 0) { "SELECT * FROM $tablename LIMIT $Limit;" } else { "SELECT * FROM $tablename;" }
    $invokeParams = @{ Query = $query }
    if (![string]::IsNullOrEmpty($ComputerName)) { $invokeParams.ComputerName = $ComputerName }
    Invoke-OsQueryTableQuery @invokeParams | Select-Object -Property *, @{Name = 'tablename'; Expression = { $tablename }}
}