Автоматическая установка приложений и настройка Windows через Winget Configure

Кроме простой установки пакетов (приложений) из репозитория, менеджер пакетов WinGet в Windows можно использовать для декларативной настройки окружения. Идея заключается в том, что администратор в декларативном YAML файле описывает желаемое состояние компьютера (настройки, необходимые программы), а winget через PowerShell Desired State Configuration (DSC) автоматически приводит Windows в указанное состояние.

Функционал управление конфигурацией компьютера через DSC доступен в WinGet, появился в 2023 году в версии 1.6.2631 и выше и поддерживается на Windows 11 и Windows 10 1809+.

Команда 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 ).

Приложения Microsoft Store устанавливаются по идентификаторам (в этом примере PowerToys). ID можно получить командой:

winget show powertoys -s msstore

winget show - получить ID приложения

Имена приложения в winget можно найти командой:

winget search appname

или среди установленных приложений:

winget list

Пример такого YAML файл доступен в нашем репозитории https://github.com/winadm/posh/blob/master/DSC/win11_wks_base_conf.yaml

YAML файл с конфигурацией для windows

Сначала нужно включить поддержку DSC через winget:

winget configure --enable

winget configure - включить компоненты DCS

Перед применением DSC конфигурации желательно проверить синтаксис YAML файла на валидность:

winget configure validate win11_wks_base_conf1.yaml

В синтаксисе YAML файлов используется система отступов, как в Python. Необходимо использовать пробелы, а не табуляцию, чтобы избежать путаницы.

Теперь применяем конфигурацию из YAML файла к компьютеру:

winget configure --file win11_wks_base_conf1.yaml --accept-configuration-agreements

winget configure применение конфигурации к компьютеру

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.

 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 configure через github

Таким образом, WinGet позволяет приводить состояние Windows машин к определённой конфигурации с помощью декларативных YAML-файлов, обеспечивая идемпотентность конфигурации и реализуя подход Infrastructure as Code (IaC) для управления Windows. Использование WinGet с DSC позволяет реализовать аналог ansible-playbook для Windows- устройств.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)