使用 WinGet 配置 (DSC) 自動化軟件和設置部署
除了從存儲庫安裝應用程序包之外,您還可以使用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 等效項,從而實現聲明式自動化配置管理。
