microsoft / winget-cli

WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface).
https://learn.microsoft.com/windows/package-manager/
MIT License
23.19k stars 1.45k forks source link

Winget List - support for version filtering #3050

Open apcsb opened 1 year ago

apcsb commented 1 year ago

Description of the new feature / enhancement

1155

Hi.

I often need to check if a specific package version is installed, or what version of a specific package is installed. Currently I have to parse text output, which is not fun, given the variable column names/widths etc.

Proposal: Add a --version argument to the list command similar to search / install / uninstall. Only show matches to that version. Optionally --version-min and -- version-max and differentiation between "not installed" and "wrong version"

Thanks!

Proposed technical implementation details

winget list <query> [--version <string>] Only return packages if matching the version

Optional: winget list <query> [--version-min <string1>] [--version-max <string2>]

Only show if installed version >= min version and/or <= max-version (should support one argument or both together) Alphanumeric Dot-Version string comparison Not compatible with --version. Alternatively, make --version support '>', '<', '>=', '<=' and some character for "in between" that is not usually used in versions ('*','~', '<>' etc.) Ex: --version '<=1.2.3a' or --version '1.2.6<>1.3.9a'

Optional: different messages / exit codes for "no package" vs "different version is present"

jantari commented 1 year ago

You can already do this with the PowerShell cmdlets for winget, for example:

Get-WinGetPackage -Id Git.Git -Source winget | Where-Object Version -like '2.32.*'

doing a comparison like 1.2.6<>1.3.9a is trickier because not all version numbers are purely numeric. In the simple cases you can do:

Get-WinGetPackage -Id Git.Git -Source winget | Where-Object {
    [Version]$_.Version -gt '2.30' -and [Version]$_.Version -lt '2.40'
}
Trenly commented 1 year ago

[Policy] Command-List

denelon commented 1 year ago

I think the other useful scenario here is to help clarify when the current installed version is "Unknown".