Кроме простой установки пакетов (приложений) из репозитория, менеджер пакетов WinGet в Windows можно использовать для декларативной настройки окружения. Идея заключается в том, что администратор в декларативном YAML файле описывает желаемое состояние компьютера (настройки, необходимые программы), а winget через PowerShell Desired State Configuration (DSC) автоматически приводит Windows в указанное состояние.
Команда
winget configure
основана на возможностях PowerShell Desired State Configuration и использует PowerShell DSC 3.0 (либо новую архитектуру Microsoft DSC 3) для приведения Windows к желаемому состоянию. В конфигурационном файле YAML декларативно описывается требуемую конфигурацию системы, включая установку/удаление программ, их версии, установку компонент Windows, необходимые параметры Windows, настройки приложений. Применив такой файл, вы можете автоматизировать разворачивание окружения рабочей станции или сервера Windows.
Рассмотрим пример простого конфигурационного YAML файла для winget, который устанавливает несколько программ (Firefox, Notepad++), удаляет 7-zip (если установлен) и включает автоматический бэкапа реестра Windows (с помощью параметра
EnablePeriodicBackup
).
winget show powertoys -s msstore
Имена приложения в winget можно найти командой:
winget search appname
или среди установленных приложений:
winget list
Пример такого YAML файл доступен в нашем репозитории https://github.com/winadm/posh/blob/master/DSC/win11_wks_base_conf.yaml
Сначала нужно включить поддержку DSC через winget:
winget configure --enable
Перед применением DSC конфигурации желательно проверить синтаксис YAML файла на валидность:
winget configure validate win11_wks_base_conf1.yaml
Теперь применяем конфигурацию из YAML файла к компьютеру:
winget configure --file win11_wks_base_conf1.yaml --accept-configuration-agreements
WinGet прочитает настройки из YAML файла, установит описанные приложения, применит указанные настройки (для парсинга yaml файла и применения настроек вызывается файл
ConfigurationRemotingServer.exe
). Таким образом, одной командой вы получите полностью настроенное Windows окружение. На экран будет выведен подробный лог о применённых параметрах DSC.
Вы можете проверить насколько текущая конфигурация компьютера соответствует описанию в YAML файле (dry-run):
winget configure test -f win11_wks_base_conf1.yaml --accept-configuration-agreements
Для всех элементов, чье состояние не соответствует конфигурации, команда вернет строки:
System is not in the described configuration state.
Если применить конфигурационный YAML файл еще раз, winget configure применит только изменения, которые не соответствуют желаемой конфигурации.
securityContext: elevated
указывает, что для применения некоторых параметров конфигурации нужно вывести (однократно) запрос повышения привилегий UAC.WinGet позволяет использовать ссылки на веб страницы в качестве источников конфигурационного YAML файла (это позволяет автоматически деплоить конфигурации через GitHub/GitLab):
winget configure --accept-configuration-agreements --disable-interactivity -f https://raw.githubusercontent.com/winadm/posh/refs/heads/master/DSC/win11_wks_base_conf.yaml
Таким образом, WinGet позволяет приводить состояние Windows машин к определённой конфигурации с помощью декларативных YAML-файлов, обеспечивая идемпотентность конфигурации и реализуя подход Infrastructure as Code (IaC) для управления Windows. Использование WinGet с DSC позволяет реализовать аналог ansible-playbook для Windows- устройств.