Как программно проверить наличие обновлений установленных программ с помощью winget?

Я потратил невероятное количество времени, пытаясь использовать .

Если я просто бегу илидля каждой программы, которая меня волнует, она не только проверяет наличие обновлений, но и фактически обновляет их , что часто означает, что она будет постоянно зависать в ожидании какого-либо приглашения. Не все установщики работают без сбоев и выполняют обновления. Я знаю это по опыту.

Поскольку собственно обновление программ черезтребует, чтобы я сидел там и активно с этим разбирался (флаг «пропускать подсказки» не работает), я хочу только проверить, есть ли обновления, чтобы я мог запрограммировать логику, чтобы определить, следует ли мне уведомлять себя о необходимости запуска тоткоманды.

Но если я это сделаю, хотя он и отображает нужную мне информацию (названия программ, установленную версию, доступную версию), он делает это как текстовый вывод, понятный человеку, и пытаться проанализировать мой сценарий неприятно. Он не поддерживает вывод в формате JSON. (И я работаю в контексте cmd.exe по необходимости, а не в PowerShell.)

Однако есть функция под названием «экспорт», которая якобы делает именно то, что я хочу: выводит файл JSON с названиями программ и... без версий. Однако у него есть секретный флаг под названием. Однако:

      winget export -o "tmp.txt" --include-versions

... включает только текущую установленную версию , а не столбец «доступная версия»! Это делает невозможным использование вывода JSON для определения наличия доступного обновления для той или иной программы!

О чём они думали, когда проектировали эту систему? Что они могут иметь в виду, что я должен сделать, чтобы узнать эту информацию? В конце концов, мне действительно нужно найти способ регулярного выражения вывода текста для человека? Это кажется таким неправильным и таким глупым, особенно когда у них есть буквальная функция «экспорта в JSON», которая позволяет избежать важной информации «доступной версии».

Как всегда: должно быть, я что-то упускаю.

1 ответ

Если только тыwingetглючит или что-то в этом роде (в последних версиях это не для меня)1.4.10173версия):

winget upgradeбез каких-либо переключателей по умолчанию просто перечисляет пакеты, которые можно обновить.

winget upgrade --allэто команда для обновления всего.

Документация также подтверждает такое поведение.

Чтобы определить, какие приложения нуждаются в обновлении, просто используйте обновление без каких-либо аргументов, чтобы отобразить все доступные обновления.

Для одного пакета вы также можете использоватьwinget list "packagename"илиwinget list package.id.

Список всех упомянутых командName,Id,Version,Available,Sourceстолбцы. Данные разделяются разным количеством пробелов, поэтому, если вам придется их использовать, потребуется расширенная пакетная обработка.

Другие вопросы по тегам