winget: пакетний менеджер Windows — корпоративне розгортання без MSI-полювання
- winget доступний у Windows 10 21H2+ / 11. На Server 2025 — з коробки. На Server 2022 — встановлюється окремо (див. нижче).
- Для системних пакетів треба запускати з-під адміна. Для user-scope (Spotify, Discord) — звичайних прав вистачає.
- Стандартний репозиторій — winget (curated Microsoft) і msstore (Microsoft Store). За замовчуванням обидва ввімкнені.
Базові команди
| Команда | Що робить |
|---|---|
winget search <name> | Пошук пакету в репозиторіях. |
winget install <id> | Встановити пакет за його ID. |
winget list | Показати все встановлене, що winget вміє бачити (включно з тим, що встановлено не через нього). |
winget upgrade | Показати, які встановлені пакети мають нові версії. |
winget upgrade --all | Оновити все, що є в апстрімі. |
winget uninstall <id> | Видалити пакет. |
winget show <id> | Показати деталі пакету (версії, publisher, розмір). |
winget export -o file.json | Експортувати список встановленого у JSON. |
winget import -i file.json | Імпортувати і встановити все з JSON. |
winget source list | Перелік джерел пакетів. |
winget settings | Відкрити settings.json у редакторі. |
Сценарій 1. Разове встановлення
Задача: встановити PowerShell 7 на свіжо-розгорнутий сервер.
winget search PowerShell
У виводі — ідентифікатор Microsoft.PowerShell. Встановлюємо:
winget install Microsoft.PowerShell --silent --accept-package-agreements --accept-source-agreements
Розбір прапорів:
--silent— тихе встановлення без інсталятора з віконцями (для скриптів обов'язково).--accept-package-agreements— авто-згода з EULA пакету.--accept-source-agreements— авто-згода з умовами джерела.
Якщо забути --accept-* у неінтерактивному скрипті, winget чекатиме на введення з клавіатури. У Task Scheduler це виглядає як «скрипт не завершується» — насправді він чекає «Y».
Сценарій 2. Масове оновлення всього
Одна команда оновить ВСЕ, що winget розпізнає:
winget upgrade --all --silent --accept-package-agreements --accept-source-agreements
Або більш акуратно — подивитись що буде оновлюватись, і лише потім застосувати:
winget upgrade winget upgrade --all --silent --accept-package-agreements --accept-source-agreements
Виключити конкретний пакет (наприклад, не чіпати Chrome — його оновлює сама Google):
winget upgrade --all --exclude Google.Chrome --silent
Сценарій 3. Масове розгортання — export/import
Задача: налаштували робоче оточення на «еталонній» машині (15-20 застосунків). Треба те саме на 50 інших машинах.
На еталонній:
winget export -o C:\Deploy\apps.json
У apps.json — JSON-маніфест з ID, версіями, джерелами всіх пакетів. Редагуйте руками, якщо потрібно:
- Прибрати зайві пакети (винятки, UI-утиліти однієї людини).
- Змінити версії на фіксовані, якщо треба repeatable deployment.
На цільовій машині:
winget import -i C:\Deploy\apps.json --accept-package-agreements --accept-source-agreements
winget проходить список і встановлює пакети послідовно. Silent-прапор у import не потрібен — він замаючий за замовчуванням. Якщо пакет уже встановлений, winget пропустить.
Сценарій 4. Корпоративне розгортання через Intune / GPO
Через Intune Proactive Remediation (чи startup-скрипт у GPO) на нову машину автоматично:
# bootstrap.ps1
$manifest = "\\fileserver\deploy\baseline-apps.json"
# Перевірити, чи winget взагалі є
if (-not (Get-Command winget -ErrorAction SilentlyContinue)) {
Write-Output "winget missing — needs App Installer from Microsoft Store"
exit 1
}
winget import -i $manifest `
--accept-package-agreements `
--accept-source-agreements `
--ignore-unavailable `
--ignore-versions
Write-Output "Deployment finished"
Прапори для корпоративного розгортання:
--ignore-unavailable— якщо якийсь пакет більше не в репозиторії, не падати, продовжити решту.--ignore-versions— брати останню доступну версію, якщо точна з маніфесту зникла.
Сценарій 5. winget на Windows Server 2022 — додаткова настройка
Windows Server 2022 не має winget з коробки. Встановлення:
# PowerShell від адміна Invoke-WebRequest -Uri "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -OutFile "C:\Temp\winget.msixbundle" Add-AppxPackage -Path C:\Temp\winget.msixbundle
Залежить від інших пакетів (VCLibs, UI.Xaml). Повний порядок і скрипт — у репозиторії microsoft/winget-cli. Після встановлення — перезайдіть у сесію.
Без Desktop Experience MSIX-пакети не встановлюються. На Server Core winget офіційно не підтримується. Використовуйте Chocolatey або Scoop як альтернативу, або встановлюйте застосунки через MSI-пакети з msiexec /i /quiet.
Сценарій 6. Власний репозиторій (enterprise)
Якщо у вас закрита корпоративна мережа без доступу до Microsoft CDN, можна запустити Windows Package Manager Private Repository — self-hosted REST API з власним індексом пакетів.
Додати джерело:
winget source add --name CorpRepo --arg https://winget.corp.local/api --type Microsoft.Rest
Встановлення з власного джерела:
winget install MyApp --source CorpRepo
Розгортання приватного репозиторію — окрема тема (див. GitHub microsoft/winget-cli-restsource). У 90% випадків цей рівень не потрібен — достатньо publicrepo з SSL-проксі для фільтрації.
Типові пастки
winget не знаходить командуНайчастіше — не встановлений App Installer (він постачає winget). У Windows 10 21H2+ App Installer з коробки, але на свіжо-розгорнутій машині міг не оновитись з Microsoft Store. Перевірка:
Get-AppxPackage Microsoft.DesktopAppInstaller | Select Name, Version
Якщо нема — ставимо з Microsoft Store або msixbundle (див. Сценарій 5).
winget через SYSTEM-акаунтПід SYSTEM-акаунтом (Task Scheduler, Intune Script, GPO Startup) winget не завжди бачиться. Причина — він інстальований у user-scope через MSIX. Обхід:
$wingetPath = (Resolve-Path "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe\winget.exe").Path | Select -Last 1 & $wingetPath install Microsoft.PowerShell --silent
У Windows Server 2025 з'явився Machine-scope winget, який працює коректно з SYSTEM — але поки мало хто на ньому.
winget тягне пакети через HTTPS. У закритих мережах з проксі-автентифікацією треба вказати проксі явно:
winget settings --set network.proxy "http://proxy.corp.local:8080"
Або через змінні середовища HTTPS_PROXY. Без цього може «зависати» при першому завантаженні манифесту.
Коротка пам'ятка — корпоративні сценарії
- Встановити тихо:
winget install X --silent --accept-package-agreements --accept-source-agreements - Оновити все:
winget upgrade --all --silent --accept-package-agreements --accept-source-agreements - Експорт встановленого:
winget export -o baseline.json - Масовий імпорт:
winget import -i baseline.json --ignore-unavailable --accept-package-agreements --accept-source-agreements - Детально про пакет:
winget show <id> - Виключити зі всеоновлення:
winget pin add <id>
Пов'язане
- ← Назад до Атласу команд Windows.
- sc + Restart-Service (спиця) — після встановлення сервісу через winget часто треба керувати ним далі.
- DISM + sfc (спиця) — коли winget падає на «unable to verify signature», проблема часто у Component Store.
winget перетворює «полювання за MSI по 15 сайтах» на один YAML-рядок. Для баз нових машин — обов'язково. Для масового розгортання — відмінна альтернатива SCCM для SMB.