winget: корпоративне розгортання Windows — IT-Wiki

[IT-FORMAT]
Новий формат бізнесу

» » » winget: пакетний менеджер Windows — корпоративне розгортання без MSI-полювання

winget: пакетний менеджер Windows — корпоративне розгортання без MSI-полювання

Цикл: IT-Wiki / Атлас команд Windows Переглядів: 8
Перед стартом
  • 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-* у скрипті = вічне зависання

Якщо забути --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. Після встановлення — перезайдіть у сесію.

На Server 2022 Core (без GUI)

Без 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-проксі для фільтрації.

Типові пастки

Пастка 1: winget не знаходить команду

Найчастіше — не встановлений App Installer (він постачає winget). У Windows 10 21H2+ App Installer з коробки, але на свіжо-розгорнутій машині міг не оновитись з Microsoft Store. Перевірка:

Get-AppxPackage Microsoft.DesktopAppInstaller | Select Name, Version

Якщо нема — ставимо з Microsoft Store або msixbundle (див. Сценарій 5).

Пастка 2: 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 — але поки мало хто на ньому.

Пастка 3: корпоративний проксі

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.

  • Коментарі


Привіт, незнайомець
Опитування

Якою програмою обліку ви користуєтесь?