Contents

WinGet Configure (DSC) を使用してソフトウェアと設定の展開を自動化する

Contents

<本文>/images/winget-find-app-id-name.png

リポジトリからアプリ パッケージをインストールするだけでなく、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

/images/winget-find-app-id-name.png.webp

Winget でアプリのパッケージ名を検索するコマンド:

winget 検索アプリ名

またはインストールされているアプリ間で:

ウィンゲットリスト

このような YAML ファイルのサンプルは、GitHub リポジトリ https://github.com/maxbakhub/winposh/blob/main/DSC/winget_configure_dsc_sample_win11.yaml にあります。

/images/winget-configure-dsc-sample-yaml-file.png.webp

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

wingetconfigure --enable

/images/winget-configure-enable-dsc.png.webp

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

/images/winget-configure-desired-state-configuration-log.png.webp

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.

/images/winget-system-is-not-in-the-described-configurati.png.webp

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

/images/winget-configure-with-yaml-in-url.png.webp

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) 昇格プロンプト、