使用 WinGet 配置 (DSC) 自动化软件和设置部署

Jacki

除了从存储库安装应用程序包之外,您还可以使用WinGet用于声明性 Windows 环境配置的包管理器。这个想法是,管理员创建一个声明性 YAML 文件来描述计算机的所需状态,包括 Windows 设置和所需的软件。然后,WinGet 使用 PowerShell Desired State Configuration (DSC) 自动将 Windows 配置为 YAML 文件中定义的指定状态。

WinGet 从版本 1.6.2631(2023 年发布)开始支持通过 DSC 管理计算机配置。

winget configure命令使用 PowerShell Desired State Configuration (DSC) 3.0(包括较新的 Microsoft DSC 3 架构)自动将 Windows 配置为配置文件中定义的所需状态。 YAML 配置文件以声明方式描述所需的系统状态,包括程序安装或删除及其版本、要添加或删除的 Windows 功能和角色,以及必要的 Windows 和应用程序设置。应用此 YAML 文件将自动在 Windows 工作站或服务器上部署环境。

现在,让我们看一下 Winget 的简单 YAML 配置文件。我的示例配置用于安装多个应用程序(Firefox、Notepad++ 和 PowerToys)并删除 7-Zip(如果已安装)。它还对注册表进行更改(使用以下命令启用 Windows 注册表备份)EnablePeriodicBackup选项)。

Microsoft Store 应用程序可以通过其应用程序 ID 安装/删除。例如,要获取 PowerToys 应用程序 ID,请运行:

winget show powertoys -s msstore

在Winget中查找应用程序包名称的命令:

winget search appname

或在已安装的应用程序中:

winget list

您可以在我们的 GitHub 存储库中找到此类 YAML 文件的示例https://github.com/maxbakhub/winposh/blob/main/DSC/winget_configure_dsc_sample_win11.yaml

现在,让我们尝试通过 winget configure 应用此 YAML 文件中的配置。首先,在 WinGet 中启用 DSC 支持:

winget configure --enable

在应用 DSC 配置之前,建议验证 YAML 文件的语法。

winget configure validate winget_configure_dsc_sample_win11.yaml

与 Python 一样,YAML 文件使用缩进来定义结构。它们依靠空格而不是制表符来表示嵌套数据块。

现在,将 YAML 文件中的配置应用到计算机。

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

WinGet 从 YAML 文件中读取设置,安装/删除所描述的应用程序,并应用指定的 Windows 设置(ConfigurationRemotingServer.exe进程解析 YAML 文件并应用设置)。因此,只需一个命令,您就可以获得一个完全配置的 Windows 环境。屏幕上将显示所应用的 DSC 设置的详细日志。

执行试运行以查看计算机的当前配置与 YAML 文件的匹配情况。

winget configure test -f winget_configure_dsc_sample_win11.yaml --accept-configuration-agreements

对于与所需配置不匹配的所有项目,该命令将返回:

阅读更多:如何使用 AI 在 Slack 中自动生成会议摘要

System is not in the described configuration state.

当您重新应用 YAML 配置文件时,Winget 配置将仅应用与所需配置不同的更改。

securityContext: elevated指令意味着需要一次性用户帐户控制 (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 允许管理员使用声明性 YAML 文件将 Windows 计算机配置为特定状态,确保配置幂等性并支持基础设施即代码 (IaC) 方法进行 Windows 环境管理。 WinGet with DSC 可让您为 Windows 设备实现 Ansible-playbook 等效项,从而实现声明式自动化配置管理。