В Windows 10 и 11 появился собственный встроенный менеджер пакетов WinGet (Windows Package Manager), который можно использовать для установки приложений из командной строки (по аналогии с пакетными менеджерами Linux, например yum, dnf, apt и т.д.).
WinGet.exe
это консольная утилита, которая позволяет упростить установку программ в Windows. Благодаря winget, вам не нужно искать официальные сайты, скачивать установочные файлы, и устанавливать программы вручную. С помощью Windows Package Manager вы можете установить любую программу из репозитория с помощью всего одной команды.
Установка менеджера пакета WinGet в Windows 10
Менеджер пакетов WinGet можно установить в Windows 10, начиная с билда 1709. В актуальных билдах Windows 11 21H2 и Windows 10 21H1 winget уже встроен в образ.
Чтобы проверить, установлен ли winget на вашем компьютере, откройте консоль PowerShell и выполните команды:
Get-AppPackage *Microsoft.DesktopAppInstaller*|select Name,PackageFullName
В нашем случае winget (имя UWP приложения Microsoft.DesktopAppInstaller) установлен.
Вы можете установить WinGet через Microsoft Store (там он называется App Installer) по ссылке https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1#activetab=pivot:overviewtab
Также вы можете установить winget вручную через PowerShell (если вы удаляли предустановленные приложения). Для этого нужно с помощью PowerShell скачать msixbundle файл winget с GitHub (https://github.com/microsoft/winget-cli/releases) и установить его (на момент написания статьи доступна версия Windows Package Manager v1.1.12653):
Invoke-WebRequest -Uri "https://github.com/microsoft/winget-cli/releases/download/v1.1.12653/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -OutFile "C:\PS\WinGet.msixbundle"
Add-AppxPackage "C:\PS\WinGet.msixbundle"
Также можно скачать и установить пакет WinGet вручную:
Проверьте установленную версию winget командой:
winget --version
Основные команды winget:
-
winget install <пакет>
— установка пакета -
winget uninstall <пакет>
— удаление пакета -
winget upgrade
– обновление пакета программы -
winget list
– вывести установленные пакеты -
winget show < пакет >
— показать информацию о пакете -
winget source < опции >
— управление репозиториями пакетов -
winget search < поисковая строка >
— поиск пакетов в репозиториях -
winget export
– экспорт списка установленных программ в файл -
winget import
– установка программ (пакетов) по списку в файле -
winget hash < пакет >
— получить хэш установщика пакета -
winget validate < пакет >
— проверить файл манифеста
Настройки winget хранятся в файле settings.json (в «C:\Users\%username%\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState»). Вы можете изменить настройки Winget с помощью команды:
winget settings
Установка программ в Windows с помощью WinGet
Для установки программ с помощью менеджера пакета WinGet используются онлайн репозитории. Их список можно вывести командой:
winget source list
По умолчанию в WinGet доступны два официальных репозитория WinGet:
- msstore — репозиторий Microsoft Store
- winget (https://winget.azureedge.net/cache) репозиторий программ, поддерживаемый Microsoft
winget source
.Прежде чем установить программу из репозитория WinGet, нужно узнать имя пакета. Для поиска пакетов используется команда search. Например, чтобы найти zip архиваторы во всех доступных репозиториях, выполните команду:
winget search zip
winget search zip -s msstore
Команда вернет список пакетов (с названиями и версиями), соответствующих вашему запросу. Обратите внимание на столбец Source. В нем указан репозиторий, в котором найден пакет.
Можно получить информацию о конкретном пакете:
winget show 7zip.7zip
В репизитории может хранится несколько версий пакета, чтобы показать список доступных версий пакета, выполните:
winget show 7zip.7zip --versions
Например, вы хотите установить архиватор 7zip. Скопируйте его имя или ID и выполните команду установки:
winget install 7zip.7zip
По-умолчанию устанавливается последняя доступная версия программы. Можно установить определенную версию пакета:
winget install 7zip.7zip -v 21.05
Как вы видите, менеджер пакетов WinGet автоматически скачал и установил приложение. Всего одной командой. Программа появилась в списке установленных программ в стартовом меню Windows.
Теперь установим, например, Windows Terminal и VSCode для написания PowerShell скриптов:
Сначала ищем имена пакетов:
winget search terminal
winget search "visual studio"
Затем устанавливаем их по очереди:
winget install Microsoft.WindowsTerminal –e ; winget install Microsoft.VisualStudioCode –e
Если вы хотите запустить установку пакета программы в фоновом режиме, используйте параметр
--silent
:
winget install "VLC media player" --silent
При установке некоторых программ можно автоматически принять условия использования. Например, при установке набора утилит sysinternals:
winget install sysinternals --accept-package-agreements
По умолчанию программы устанавливаются на системный диск в каталоги Program Files. Вы можете изменить каталог установки программы:
winget install microsoft.visualstudiocode --location "D:\Programs"
Winstall – графической интерфейс для менеджера пакетов WinGet
Пользователи, которым некомфортно работать в командной строке winget, могут использовать веб-сервис Winstall (https://winstall.app/). Winstall представляет собой графический интерфейс для репозитория WinGet (для установки доступно более 2900 программ).
С помощью сервиса Winstall можно сгенерировать скрипт установки нужных вам программ. Найдите программы в репозитории и нажмите + для добавления их в скрипт установки.
Затем нажмите на кнопку Generate Script и сервис сформирует для вас команду установки выбранных приложений.
Скопируйте код со вкладки Batch или PowerShell и вставьте его соответственно в cmd.exe или PowerShell консоль.
Так, с помощью всего одной команды вы можете установить необходимые вам программы.
WinGet: Обновление и удаление программ в Windows
WinGet позволяет не только устанавливать программы, но и обновлять или удалять их. Для вывода списка установленных программ на компьютере выполните:
Winget list
Команда выведет полный список программ, установленных на компьютере (включая программы, установленные не через winget). Если для программы доступно обновление, в столбце Available будет указана новая версия.
Для обновления приложения, установленного через winget, выполните команды:
winget upgrade --id 7zip.7zip
Можно обновить сразу все установленные программы:
winget upgrade --all
Для удаления программ используется команда:
winget uninstall --name 7zip.7zip
Вы также можете удалить приложения, установленные не через WinGet по их ID:
winget uninstall --id "{0F693AA3-4387-4ACB-A6FD-3A396290587}"
Экспорт и импорт установленных приложений на другие компьютеры
С помощью WinGet вы можете экспортировать в JSON файл список приложений, установленных на компьютере и затем использовать этот файл для быстрой установки того же набора приложений на другом компьютере.
Для экспорта списка приложений в файл, выполните:
winget export -o c:\ps\installedapps.json --include-versions
The installed package is not available in any source
«.Файл содержит список программ, установленный через Windows Package Manager.
Чтобы установить список программ из json файла на другом компьютере, выполните команду:
winget import -o .\installedapps.json
Можно указать, чтобы менеджер пакетов игнорировал версии и недоступные программы при установке, нужно добавить параметры
--ignore-unavailable
и
--ignore-versions
.
Зачем если есть choco? Притом и апдейты пакетов есть. И версионность и гуй к нему, и репозиторий поднять можно хоть на нексусе, хоть на iis, да хоть из локальной папки или шары.
Windows оно свое родное, встроенное, + update будут приходить на него. MS сможет статистику по устанавленому софту вести
В винде был / есть nuget(oneget) еще очеееень давно. Но развивалось это крайне хреново. Кстати choco это обязка над нугетом. Но сделана намного лучше. И она кстати тоже может тянуть апдейты и даже ветка энтерпрайз есть. Да встроенные средства это хорошо, но у майков явно приоритет был направляен на Ажур. Поэтому многие классные идеи реализованы абы как
а как в таком случае снимать чекбокс, что бы не ставились говнобраузеры и прочий мусор?
А никак, всё включено :).
А у меня не запускается winget из консоли запущенной от Администратора.
Вот аналогичная проблема, но кругом только костыли.
https://github.com/microsoft/winget-cli/issues/637
Может кто-то рабочее нормальное решение знает?
Майки как всегда по своему все сделали, не умеют они в консоль….
winget upgrade —id 7zip.7zip — зачем тут ключ —id,
winget uninstall —name 7zip.7zip — зачем тут ключ —name
Более того, почему при апгрейде ключ —id, а в анинсталле —name, какой смысл в этом…Я понимаю что можно обратиться к ID пакета по его «хешу»:
winget uninstall —id «{0F693AA3-4387-4ACB-A6FD-3A396290587}» тут есть логика, так пусть она и остается тут, хотя и тут ключ —id все равно лишняя информация.
winget install —id=Notepad++.Notepad++ -e ; winget install —id=Microsoft.Teams -e ; winget install —id=Mozilla.Firefox -e — То есть перечислением без ключей и знаков препинания как APT/YUM — вингет не может, нужно чередовать команду полностью… Зачем?
winget install —id=Notepad++.Notepad++ -e — Опять набор херни, почему не определять вот так: «winget install notepad++» и тому подобное(понятно что там каталогизировано по типу как портов во фряхе, только по названию издателя, а не направлению, но можно же и упростить местами, тот же Microsoft.Teams как msteams)
winget install —id=Adobe.Acrobat.Reader.64-bit — зачем указывать разрядность, почему не ставить сразу на основе разряда ОС. А вот если тебе на х64 нужен х32 пакет, то тогда явно указывать. Заморочено опять же. Так как в х32 не поставить х64, а наоборот можно, тогда какой смысл это делать для х64, если это логично. Я понимаю, иногда нужна конкретная библиотека в х64 от х32….Но акробат не библиотека….
Это похоже на претензию о том, что в PowerShell имена командлетов длинные (как будто бы нет autocomplite, а запоминать короткие команд, которыми пользуешься раз в полгода будто бы легче, чем словосочетания, близкие к человеческому языку). 😀
Мне кажется, чем больше способов уточнить параметры — тем лучше.
Если на свой комп ставить софт — это, условно, «раз в пятилетку» — пяток лишних символов набрать не проблема.
А если не на свой и не раз в пятилетку — наверняка будет скрипт, то есть, опять сводиться к «пяток лишних символов».
Winget существует полтора года только, но уже сейчас существует 3 дистрибутива Notepad++, которые он находит.
И команда «winget install Notepad++» ожидаемо приводит к вопросу «А какой именно Notepad++ вам поставить?».
То есть, запустил я установку штук 20 программ и пошел ужинать. Возвращаюсь, и начинаю изучать, а где же там по короткому имени е удалось определить автоматом, какой дистрибутив выбрать…
)))) да-да-да, запустили вы шт 20 программ и пришли после ужина к разбитому корыту… ибо ни чего не встало
а не встало из-за дурацкой особенности winget требовать админа после каждого пакета, а не разово вначале и помнить до конца установки….
Т.е. мы сидим и курим перед монитором час пока он каждый пакетик скачает поставит и займется следующим, а если вовремя не подтвердили админские права, то вообще прервет установку
я конечно могу ошибаться, но собственно за этим и открыл данную статью, чтобы найти как же это гуано обойти, а не сидеть и не ждать как он каждый пакет качает, чтобы после каждого вводить пароль
Запрос «прав администратора» — он же для того, чтобы не позволять приложениям запускаться с повышенными привилегиями незаметно.
А если это осознанный запуск пачки инсталляторов — можно запустить оболочку, откуда будет вызываться winget с повышенными правами и идти спокойно ужинать. 🙂
Во первых причем тут павершел и вингет, а во вторых пример тут твой не к месту совсем, у вингета нет автокомплита от слова совсем, плюс пяток лишнего там, пяток лишнего тут, вот и получается х**та а не «пакетный менеджер». Классика от майков. Нужно упрощать, а не вот это вот все. Никаких уточнений не требуется делать, если ты тупо ставишь пакет. Если ты хочешь специфический вариант, будь любезен топай и собирай ручками, ну или выбирай доп параметры. Если для тебя это прозрачно, если тебе это все норм, запоминать в какой параметр где и когда и при каких условиях ставится ключ, при том что они делают одно и тоже, как например winget upgrade —id и winget uninstall —name, где id и name это одно блин и тоже, то для меня это только отталкивающий фактор. Про пятилетку и чаще чем в пятилетку: ты же судишь по себе, если ты «раз в пять лет» юзаешь вингет то это твой опыт, не надо накладывать его на других как правду в последней инстанции.
Я только сейчас понял, что в комментарии выше было обсуждение примеров из статьи, а не самого winget.
Делать выводы о том инструмент работает ТОЛЬКО так как описано в статье — ну это, говоря прилично, странно.
Тем более, это обзорная статью. по сути: чем больше примеров различных параметров будет показано — тем лучше.
Что же касается Winget:
— Можно так: winget install Todoist
— Можно так: winget install -name Todoist
— Можно так: winget install —id Doist.Todoist
Как видно, name и id — разные вещи. И «лишние» параметры указывать необязательно, когда ситуация однозначная.
Но вот сделать winget install «Python 3» нельзя, так как пакетов с именем «Python 3» будет два. Но у них разный ID и я могу сделать так:
winget install Python.Python.3 — без параметр —id. И winget «сам разберется», что я имел в виду «winget install —id Python.Python.3»
Тоже самое касается и конкретного примера из комментария выше — winget install Notepad++ приводит к запросу «а какой именно из этих доступных пакет Вам нужен?»
Что касается winget install —id=Adobe.Acrobat.Reader.64-bit — А как должно быть? Все должны дружно договорить или Microsoft должна всех убедить? Или стандарт какой навязать?
Есть пакет «Adobe Acrobat Reader DC» (из магазина, ID — XPDP273C0XHQH2), если ставить его на x64 — winget ставить x64. Как он ведет себя на x32 — не проверял.
А ещё есть пакет «Adobe Acrobat Reader DC» (ID — Adobe.Acrobat.Reader.32-bit), который явно 32-х битный и к нему в пару есть «Adobe Acrobat DC (64-bit)» (ID — Adobe.Acrobat.Reader.64-bit).
Мне такое именование тоже не нравиться, но это вопросы к этому парню, а не Microsoft.
То есть из всего комментария случайно получилось одно дельное замечание — нельзя ставить несколько пакетов одной командой. Issue висит на GitHub уже полтора года, да.
P.S. — Про «раз в пять лет» — да, это мой опыт, безусловно. Но массовая (пере)установка ПО — это похоже на случай свежей установки ОС. Так уже часто это случается? Если это разовая установка какой-то программы/компонента/библиотеки, которая раньше не нужна была, но потом понадобилась, то все равно начинать с команды «winget search имя_пакета». И тут снова — пяток лишних символов не должен быть проблемой.
P.P.S — PoweShell был упомянут только из-за того, что претензии к именованию командлетов и функций обычно примерно такие же — «я пишу короткие команды каждый день и уже их выучил, а тут в пример вон какие длинные — зачем все это лишнее печать, можно же было проще?». К Winget он никак не относиться. Просто претензии забавны и очень похожи.
Разве не import должен быть?
admin: верно, исправлено
)))) да-да-да, запустили вы шт 20 программ и пришли после ужина к разбитому корыту… ибо ни чего не встало
а не встало из-за дурацкой особенности winget требовать админа после каждого пакета, а не разово вначале и помнить до конца установки….
Т.е. мы сидим и курим перед монитором час пока он каждый пакетик скачает поставит и займется следующим, а если вовремя не подтвердили админские права, то вообще прервет установку
я конечно могу ошибаться, но собственно за этим и открыл данную статью, чтобы найти как же это гуано обойти, а не сидеть и не ждать как он каждый пакет качает, чтобы после каждого вводить пароль
просьба удалить — коммент не прикрепился к сообщению на которое отвечал
winget upgrade —all —include-unknown -h
Некрокоммент в копилку))))
Посмотрел на это поделие — всё как всегда, идея хороша, реализация из рук вон плохо, если хоть немного работал в Linux — смотреть на этот кошмар невозможно. Может быть, когда-то и станет получше, но, зная как МС работает с подобными проектами — надежда очень слабая. Тот же Chocolatey выглядит гораздо привлекательнее.
полностью согласен
После установки через пакет Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle при запуске появляется ошибка
C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.20.441.0_x64__8wekyb3d8bbwe\winget.exe
No applicable app licenses found.
или
ResourceUnavailable: Program 'winget.exe' failed to run: An error occurred trying to start process 'C:\Users\myuser\AppData\Local\Microsoft\WindowsApps\winget.exe' with working directory 'C:\Windows\System32'. No applicable app licenses found.At line:1 char:1
Я использую WingetUI как графическую оболочку для winget. WingetUI ещё работает с Chocolatey и другими репозитариями ПО, но новое ПО ищет только в winget (так мне показалось). WingetUI содержит в себе собственные winget и Шоколад. Это мне не нравится, но каких-то проблем не заметил.
Установка:
winget install wingetui
Скрипт для устанвки winget с учетом удаленных зависимостей:
_https://christitus.com/installing-appx-without-msstore/
Как установить winget в WS 2019/2022?
Попробуйте так:
# Install VCLibs
Add-AppxPackage 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx'
# Install Microsoft.UI.Xaml.2.7.3
Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.3 -OutFile .\microsoft.ui.xaml.2.7.3.zip
Expand-Archive .\microsoft.ui.xaml.2.7.3.zip
Add-AppxPackage .\microsoft.ui.xaml.2.7.3\tools\AppX\x64\Release\Microsoft.UI.Xaml.2.7.appx
# Install Microsoft.DesktopInstaller (winget)
Invoke-WebRequest -Uri https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -OutFile .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Add-AppxPackage .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Добрый день!
При установке выдает ошибку:
PS C:\Users\Администратор> add-appxpackage .\microsoft.desktopappinstaller_8wekyb3d8bbwe.msixbundle
add-appxpackage : Сбой развертывания с HRESULT: 0x80073CF3, Пакет не прошел проверку обновлений, зависимостей или конфл
иктов.
Windows не удается установить пакет Microsoft.DesktopAppInstaller_1.23.1911.0_x64__8wekyb3d8bbwe, поскольку он зависит
от платформы, которую не удается найти. Предоставьте платформу «Microsoft.UI.Xaml.2.8», опубликованную «CN=Microsoft Co
rporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», с нейтральной архитектурой или архитектурой процесс
ора x64 и минимальной версией 8.2310.30001.0 вместе с этим пакетом для установки. Платформы с именем «Microsoft.UI.Xaml
.2.8», установленные в настоящий мом
Windows не удается установить пакет Microsoft.DesktopAppInstaller_1.23.1911.0_x64__8wekyb3d8bbwe, поскольку он зависит
от платформы, которую не удается найти. Предоставьте платформу «Microsoft.UI.Xaml.2.8», опубликованную «CN=Microsoft Co
rporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», с нейтральной архитектурой или архитектурой процесс
ора x64 и минимальной версией 8.2310.30001.0 вместе с этим пакетом для установки. Платформы с именем «Microsoft.UI.Xaml
.2.8», установленные в настоящий момент: {Microsoft.UI.Xaml.2.8_8.2306.22001.0_x64__8wekyb3d8bbwe}
ПРИМЕЧАНИЕ. Чтобы получить дополнительные сведения, найдите [ActivityId] cbf2f3c2-0a7f-0002-73b4-f3cb7f0adb01 в журнале
событий или введите в командной строке Get-AppxLog -ActivityID cbf2f3c2-0a7f-0002-73b4-f3cb7f0adb01.
строка:1 знак:1
+ add-appxpackage .\microsoft.desktopappinstaller_8wekyb3d8bbwe.msixbun …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (C:\Users\Админи…bbwe.msixbundle:String) [Add-AppxPackage], IOException
+ FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand
Пробовал установить Microsoft.UI.Xaml.2.8, не помогает.
Ну тут явно указывает на зависимость от пакета Microsoft.UI.Xaml.2.8.
Возможно нужно скачать последниюю версию Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle (_https://github.com/microsoft/winget-cli/releases/) + последнюю версию
Microsoft.UI.Xaml.2.8.x64.appx (_https://github.com/microsoft/microsoft-ui-xaml/releases/tag/v2.8.6)
Здравствуйте!
Можно ли исключить некоторые программы, а то winget upgrade —all —include-unknown не увенчалось успехом?
Соглашения для пакетов не приняты. Операция отменена.
Принять все соглашения:
winget upgrade --all --accept-package-agreements
Winget позволяет сказать пакет для последующей ручной установки:
winget download Calculator -s msstore
Установочный файл будет загружен в каталог Downloads
Средство командной строки WinGet поддерживается только в Windows 10 1709 (сборка 16299) или более поздней версии. WinGet не будет доступен, пока вы не вошли в Windows в качестве пользователя в первый раз, активируя Microsoft Store для регистрации Диспетчер пакетов Windows в рамках асинхронного процесса. Если вы недавно вошли в качестве пользователя впервые и обнаружили, что WinGet еще недоступен, вы можете открыть PowerShell и ввести следующую команду, чтобы запросить эту регистрацию WinGet: Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe