Конфигурация Windows с помощью WinGet и PowerShell DSC на основе декларативных YAML-файлов
Помимо установки пакетов приложений из репозитория, менеджер пакетов WinGet позволяет использовать декларативную конфигурацию среды Windows. Суть заключается в том, что администратор создаёт декларативный YAML-файл, в котором описывается требуемое состояние компьютера, включая настройки Windows и необходимое программное обеспечение. Затем WinGet с помощью PowerShell Desired State Configuration (DSC) автоматически приводит Windows в состояние, заданное в YAML-файле.
Команда winget configure использует PowerShell Desired State Configuration (DSC) 3.0, включая новую архитектуру Microsoft DSC 3, для автоматической настройки Windows в соответствии с состоянием, описанным в файле конфигурации. YAML-файл декларативно описывает требуемое системное состояние: установку или удаление программ с указанием версий, добавление или удаление функций и ролей Windows, а также необходимые настройки Windows и приложений. Применение такого YAML-файла позволит автоматизировать развертывание окружения на рабочей станции или сервере под управлением Windows.
Пример YAML-конфигурации для WinGet
Рассмотрим простой пример YAML-файла, который я использовал для установки нескольких приложений (Firefox, Notepad++ и PowerToys) и удаления 7-Zip, если он установлен. Кроме того, файл вносит изменения в реестр — включает резервное копирование реестра Windows с помощью опции EnablePeriodicBackup.
Приложения из Microsoft Store можно устанавливать и удалять по их App ID. Например, чтобы узнать App ID PowerToys, выполните команду:
winget show powertoys -s msstore
Команды для поиска имён пакетов приложений в Winget:
winget search appname— найти пакет по имениwinget list— показать список установленных приложений
Пример такого YAML-файла размещён в нашем репозитории на GitHub:
https://github.com/maxbakhub/winposh/blob/main/DSC/winget_configure_dsc_sample_win11.yaml

Применение конфигурации YAML с помощью Winget
Сначала включите поддержку DSC в WinGet:
winget configure --enable
Рекомендуется перед применением проверить корректность синтаксиса YAML-файла:
winget configure validate winget_configure_dsc_sample_win11.yamlТеперь применим конфигурацию из YAML-файла к компьютеру:
winget configure --file winget_configure_dsc_sample_win11.yaml --accept-configuration-agreements
WinGet прочитает настройки из YAML, установит или удалит описанные приложения и применит заданные настройки Windows (за это отвечает процесс ConfigurationRemotingServer.exe, который парсит YAML и конфигурирует систему). Таким образом, одной командой вы получите полностью настроенную среду Windows. На экране появится подробный лог выполнения конфигурации DSC.
Dry Run — проверка соответствия текущей конфигурации
Чтобы посмотреть, насколько текущая конфигурация компьютера соответствует YAML-файлу, выполните команду сухого прогона:
winget configure test -f winget_configure_dsc_sample_win11.yaml --accept-configuration-agreementsДля всех пунктов, не соответствующих заданной конфигурации, команда выведет сообщение:
System is not in the described configuration state.
При повторном применении YAML-конфигурации Winget Configure внесёт только те изменения, которые отличаются от желаемого состояния.
securityContext: elevated означает, что для применения некоторых системных настроек будет запрошено однократное подтверждение повышения прав (UAC).Использование YAML-файла из внешнего источника
WinGet позволяет указывать YAML-конфигурацию, расположенную на внешнем веб-ресурсе. Это удобно для автоматизации развертывания конфигураций из GitHub, GitLab и других сервисов.
winget configure --accept-configuration-agreements --disable-interactivity -f https://raw.githubusercontent.com/maxbakhub/winposh/refs/heads/main/DSC/winget_configure_dsc_sample_win11.yaml
Заключение
WinGet с поддержкой PowerShell Desired State Configuration позволяет администраторам программно настраивать Windows-машины в точно заданное состояние с помощью декларативных YAML-файлов. Такой подход обеспечивает идемпотентность конфигурации и поддерживает концепцию Infrastructure as Code (IaC) при управлении средой Windows. WinGet с DSC — это аналог Ansible-playbook для Windows, открывающий возможности декларативного и автоматизированного управления конфигурацией корпоративных Windows-устройств.