Управление конфигурацией Windows с помощью WinGet и PowerShell Desired State Configuration (DSC)
Помимо установки пакетов приложений из репозитория, вы можете использовать менеджер пакетов 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, а также необходимые настройки системы и приложений. Применение этого YAML-файла автоматизирует развертывание среды на рабочей станции или сервере под управлением Windows.
Рассмотрим простой пример YAML-конфигурации для WinGet. В моём примере выполняется установка нескольких приложений (Firefox, Notepad++ и PowerToys) и удаление 7-Zip, если он установлен. Также вносятся изменения в реестр Windows (включается резервное копирование реестра с помощью опции EnablePeriodicBackup).
winget show powertoys -s msstore

Команды для поиска названий пакетов в Winget:
winget search appname— поиск по имени приложения в репозиторииwinget list— просмотр установленных приложений
Образец такого YAML-файла вы можете найти в нашем репозитории на GitHub: winget_configure_dsc_sample_win11.yaml

Теперь применим конфигурацию из этого YAML-файла с помощью winget configure. Сначала активируем поддержку DSC в WinGet:
winget configure --enable

Перед применением DSC-конфигурации рекомендуется проверить синтаксис 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-настроек.
Для просмотра, насколько текущая конфигурация компьютера соответствует YAML-файлу, можно выполнить тестовый запуск (dry run):
winget configure test -f winget_configure_dsc_sample_win11.yaml --accept-configuration-agreements
Для всех параметров, которые не совпадают с требуемой конфигурацией, команда выдаст сообщение:
System is not in the described configuration state.

При повторном применении YAML-конфигурации WinGet настроит только те параметры, которые отличаются от желаемого состояния.
securityContext: elevated означает, что для применения некоторых системных настроек потребуется однократное подтверждение повышения прав через User Account Control (UAC).
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 позволяет администраторам конфигурировать Windows-машины до нужного состояния с помощью декларативных YAML-файлов, обеспечивая идемпотентность настроек и поддерживая подход Infrastructure as Code (IaC) для управления средой Windows. WinGet вместе с DSC предоставляет возможность создавать для Windows устройств эквивалент Ansible-плейбуков, что позволяет реализовать декларативное и автоматизированное управление конфигурацией.


