WinGet Configure (DSC) を使用してソフトウェアと設定の展開を自動化する
<本文>
リポジトリからアプリ パッケージをインストールするだけでなく、WinGet パッケージ マネージャーを使用して宣言的な Windows 環境構成を行うこともできます。その考え方は、管理者が Windows 設定や必要なソフトウェアなど、コンピューターの望ましい状態を記述する宣言型 YAML ファイルを作成するというものです。次に、WinGet は PowerShell Desired State Configuration (DSC) を使用して、YAML ファイルで定義された指定された状態に Windows を自動的に構成します。
WinGet は、バージョン 1.6.2631 (2023 年リリース) 以降、DSC を介したコンピューター構成の管理をサポートします。
winget configure コマンドは、新しい Microsoft DSC 3 アーキテクチャを含む PowerShell Desired State Configuration (DSC) 3.0 を使用して、構成ファイルで定義された望ましい状態に Windows を自動的に構成します。 YAML 構成ファイルは、プログラムのインストールまたは削除とそのバージョン、追加または削除する Windows の機能と役割、必要な Windows とアプリケーションの設定など、必要なシステム状態を宣言的に記述します。この YAML ファイルを適用すると、Windows ワークステーションまたはサーバーへの環境の展開が自動化されます。
次に、Winget の単純な YAML 構成ファイルを見てみましょう。私のサンプル構成では、いくつかのアプリ (Firefox、Notepad++、PowerToys) をインストールし、7-Zip がインストールされている場合は削除していました。また、レジストリも変更します (「EnablePeriodicBackup」オプションを使用して Windows レジストリのバックアップを有効にします)。
Microsoft Store アプリは、アプリ ID によってインストール/削除できます。たとえば、PowerToys アプリ ID を取得するには、次を実行します。
winget show powertoys-s msstore

Winget でアプリのパッケージ名を検索するコマンド:
winget 検索アプリ名
またはインストールされているアプリ間で:
ウィンゲットリスト
このような YAML ファイルのサンプルは、GitHub リポジトリ https://github.com/maxbakhub/winposh/blob/main/DSC/winget_configure_dsc_sample_win11.yaml にあります。

ここで、winget configure を使用して、この YAML ファイルから構成を適用してみましょう。まず、WinGet で DSC サポートを有効にします。
wingetconfigure --enable

DSC 構成を適用する前に、YAML ファイルの構文を検証することをお勧めします。
winget configure validate winget\_configure\_dsc\_sample\_win11.yaml
Python と同様に、YAML ファイルはインデントを使用して構造を定義します。ネストされたデータ ブロックを表すためにタブではなくスペースに依存します。
次に、YAML ファイルの構成をコンピューターに適用します。
winget configure--ファイル winget\_configure\_dsc\_sample\_win11.yaml--accept-configuration-agreements

WinGet は、YAML ファイルから設定を読み取り、記述されたアプリをインストール/削除し、指定された Windows 設定を適用します (「ConfigurationRemotingServer.exe」プロセスが YAML ファイルを解析して設定を適用します)。したがって、たった 1 つのコマンドで、完全に構成された Windows 環境を取得できます。適用された DSC 設定の詳細なログが画面に表示されます。
ドライランを実行して、コンピューターの現在の構成が 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 ディレクティブは、1 回限りの
このディレクティブは、特定のシステム構成設定を適用するには、1 回限りのユーザー アカウント制御 (UAC) 昇格プロンプトが必要であることを意味します。
WinGet を使用すると、外部 Web ページにある 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 マシンを特定の状態に構成できるため、構成の冪等性が確保され、Windows 環境管理に対する Infrastructure as Code (IaC) アプローチがサポートされます。 WinGet と DSC を使用すると、Windows デバイスに同等の Ansible プレイブックを実装でき、宣言的で自動化された構成管理が可能になります。
*️⃣ 出典リンク:
WinGet パッケージ マネージャー、Windows レジストリ バックアップを有効にする、 https://github.com/maxbakhub/winposh/blob/main/DSC/winget_configure_dsc_sample_win11.yaml 、ユーザー アカウント制御(UAC) 昇格プロンプト、