WinGet (Windows Package Manager) - пакетный менеджер для Windows

Пакетный менеджер - хорошо знакомый любому Linux администратору вид ПО, который позволяет централизованно управлять программным обеспечением в системе и легко автоматизировать этот процесс. Пользователи Windows долгое время были лишены подобного инструмента, собственно, как вообще какого-то централизованного подхода к управлению ПО, но затем в Windows появился Магазин, а затем и менеджер пакетов, названный просто - Windows Package Manager или WinGet. В данной статье мы рассмотрим его особенности и примеры работы с ним.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

В целом, если вы имеете опыт работы с любым пакетным менеджером, то начать работу с WinGet будет несложно, но есть определенные отличия. Начнем с того, что в Linux системах репозиторий является доверенным источником приложений, который связан либо с дистрибутивом, либо с разработчиком ПО и мы всегда понимаем из какого источника мы получаем тот или иной пакет.

В WinGet имеется два источника пакетов: магазин Windows и собственный репозиторий, поддерживаемый Microsoft. Но данный репозиторий является лишь одним из каналов распространения ПО независимыми поставщиками. Грубо говоря репозиторий WinGet является просто каталогом ссылок на скачивание инсталляторов того или иного ПО из различных источников, предлагаемых их разработчиками.

Это, конечно же лучше, чем искать и скачивать пакеты в интернет, но серьезно отличается от принятой в Linux модели: если там, скачивая пакет из репозитория дистрибутива мы можем быть уверены, что пакет протестирован именно под вашу версию дистрибутива, то здесь все вопросы к разработчику, если пакет нестабильно работает или не работает под вашу версию ОС, то WinGet ничем вам тут не поможет.

Равно как вопрос доверия к дистрибутиву и репозиторию как единому целому меняется на вопрос доверия к каждой отдельной программе, поэтому будьте внимательны и осмотрительны в выборе ПО при использовании пакетного менеджера Windows.

Возможности WinGet доступны начиная с Windows 10 1709 и во всех актуальных выпусках он предустановлен по умолчанию, в противном случае его можно получить в Магазине Windows под названием App Installer:

Либо скачать с официальной страницы на Github:

Рекомендуем к прочтению

Начнем же работу с ним с получения списка уже установленных приложений:

1winget list

Следует отметить, что WinGet поддерживает работу и с приложениями, установленными вручную или из магазина, поэтому вы всегда можете комбинировать подходы, это удобно и полностью оправдано в принятой в Windows модели управления ПО. Давайте рассмотрим вывод команды подробнее:

Колонка Имя содержит понятное пользователю имя приложения на языке локализации системы, ИД (ID) - его идентификатор, уникальный для каждого приложения, колонки Версия и Доступно показывают установленную версию и последнюю доступную в репозиториях. И наконец колонка Источник показывает на репозиторий в котором доступен пакет. Посмотреть список подключенных репозиториев можно командой:

1winget source list

Как мы уже говорили выше, по умолчанию подключено два репозитория: Магазин Windows и WinGet.

Отсутствие репозитория в колонке источник означает, что пакета нет в репозиториях WinGet, но вы можете управлять им с его помощью, хотя список доступных возможностей здесь невелик и сводится к удалению пакета, это может быть удобно в сценариях, когда вы хотите автоматически удалить часть предустановленного ПО. Например, мы можем легко удалить Яндекс.Музыку командой:

1winget uninstall Яндекс.Музыка

Но установить назад мы ее уже не сможем, так как программы нет в доступных источниках пакетов.

Для установки ПО нам потребуется указать название пакета или его идентификатор, чтобы найти их следует использовать команду поиска, например:

1winget search office

В результате получим все возможные варианты, найденные по заданной строке:

Если не указан фильтр, то поиск производится по всем доступным полям: имя, идентификатор, тег и моникер (прозвище), последний параметр представляет короткое имя, связанное именно с этим пакетом, если строка запроса содержит пробелы, то ее нужно обернуть в кавычки. Также мы можем указать источник, в котором производим поиск. Например, выполним поиск по прозвищу "office" в репозитории Winget:

1winget search --moniker office -s winget

Результат показывает все пакеты, моникер которых содержит искомое вхождение:

Если нам нужно строгое вхождение, то к строке запроса нужно добавить ключ**-e**, в этом случае будет искаться полное совпадение с учетом регистра. Например, команда:

1winget search --moniker office -s winget -e

Вернет только первую строку, так как она единственная полностью подходит под запрос.

Всего мы можем использовать следующие фильтры:

  • --name - имя пакета
  • --id - идентификатор пакета
  • --tag - тег пакета
  • --moniker - прозвище пакета

Если вы забыли какие-то ключи или опции команды не беда, просто запустите ее без аргументов и вы получите короткую справку по команде.

После того, как мы нашли интересующий нас пакет, мы можем посмотреть информацию о нем, например:

1winget show "WPS Office"

Если под запрос попадают сразу несколько пакетов, то пакетный менеджер попросит нас уточнить запрос:

В большинстве случаев будет достаточно добавить ключ -e для строгого совпадения, но не в этот раз, потому что китайская и международная версия имеют одинаковое имя, поэтому в данном случае правильно будет использовать идентификатор:

1winget show Kingsoft.WPSOffice

После чего мы получим всю информацию о пакете, включая теги и прозвище, если есть.

Для получения списка версий доступных в репозитории выполните:

1winget show Kingsoft.WPSOffice --versions

Теперь можно установить пакет, для это используется команда install и она точно также производит поиск по строке запроса. Будет установлено самое точное вхождение, при нахождении нескольких результатов вас попросят уточнить запрос.

1winget install Kingsoft.WPSOffice

Мы также можем добавить фильтр поиска, скажем, только по ID:

1winget install --id Kingsoft.WPSOffice

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

Есть два способа изменить это поведение, для того чтобы полностью скрыть процесс установки используйте ключ:

1-h, --silent

А для запуска установки в интерактивном режиме, когда вам, как обычно, придется отвечать на вопросы и выбирать варианты, добавьте ключ:

1-i, --interactive

Чтобы установить пакет нужной версии используйте ключ:

1-v, --version

Альтернативой установке может быть действие download, которое просто скачает в папку Загрузки инсталлятор пакета. Для обоих действий можно явно указать архитектуру при помощи ключа:

1-a, --architecture

Доступными являются значения: X86 и X64.

А если пакет поддерживает разделение на языковые версии, то также можно указать нужный язык при помощи ключа:

1--locale

Значение языка следует указывать в формате BCP47, для русского это будет ru-RU, а для английскогоen-US. По умолчанию скачивается пакет с локалью и разрядностью совпадающей с параметрами системы. Например, команда:

1winget download RARLab.WinRAR

Скачает русскую 64-разрядную версию приложения, а для скачивания 32-разрядной английской нам потребуется указать:

1winget download RARLab.WinRAR --locale en-US -a X86

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

1winget upgrade Microsoft.VCRedist.2015+.x64

В данном случае мы обновим распространяемый пакет Microsoft Visual C++ Redistributable

Для того, чтобы обновить все пакеты, имеющие доступные обновления, используйте:

1winget upgrade --all

С обновлением пакета тесно связано еще одно действие - закрепление, которое позволяет зафиксировать текущую версию пакета и сделать его недоступным для обновления. В самом простом случае для закрепления используйте:

1winget pin add RARLab.WinRAR

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

Чтобы полностью заблокировать обновление пакета следует добавить дополнительный ключ:

1winget pin add RARLab.WinRAR --blocking

Еще один вариант закрепления, это закрепление пакета в рамках определенной версии, например:

1winget pin add LibreOffice --version 7.4.*

Для просмотра закрепленных пакетов используйте

1winget pin list

А для удаления закрепления:

1winget pin remove LibreOffice

Чтобы удалить установленную программу используйте действие uninstall:

1winget uninstall LibreOffice

Но на этом возможности пакетного менеджера не заканчиваются, вы можете экспортировать список установленного ПО командой:

1winget export -o C:\ADM\myapp.json

Если требуется указать конкретные версии ПО, то добавьте ключ:

1--include-versions

После чего в указанный файл будет выгружен список всего установленного на ПК ПО, которое есть в репозиториях, неважно как оно было установлено, через WinGet или вручную.

Для автоматической установки ПО из указанного списка используйте команду импорта:

1winget import -i C:\ADM\myapp.json

Это позволяет быстро восстановить набор ПО после переустановки ОС или перенести его на другой ПК, а также развернуть нужный набор программ на партию компьютеров.

Если вы запускаете команду импорта на новом ПК, то добавьте ключ:

1--accept-source-agreements

Который подавляет запрос на принятие исходного лицензионного соглашения на использование источника пакетов. Также можно добавить:

1--accept-package-agreements

Для автоматического принятия лицензионного соглашения, которое может потребоваться для некоторых пакетов.

Чтобы избежать появления ошибок в случае недоступности пакета в источнике используйте:

1--ignore-unavailable

Если в файле экспорта указаны определенные версии пакетов, то вы можете проигнорировать их ключом:

1--ignore-versions

При его использовании будут установлены самые последние доступные версии пакетов.

Также, если вы не хотите обновлять уже существующие пакеты добавьте ключ:

1--no-upgrade

В итоге команда импорта на новом ПК может выглядеть так:

1winget import -i C:\ADM\myapp.json --accept-source-agreements --accept-package-agreements --ignore-unavailable --no-upgrade

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал