Windowsクライアントをコードで全自動展開する — Windows/M365環境構築シリーズ Part9
この記事の内容
- Hyper-V上でWindows 10およびWindows 11のゴールデンイメージを作成する手順を解説します
- Sysprepと応答ファイル(Unattend.xml)を組み合わせ、クライアントOSを全自動で構成する方法を紹介します
- WinRMをオフライン環境でセットアップするためのHyper-Vゲストサービス活用法を説明します
- サーバー版の応答ファイルとクライアント版の違いについてポイントを整理します
- Ansibleプレイブックから
Copy-VMFileコマンドレットを利用してVMを自動展開するフローを示します
はじめに
前回までのシリーズでは、Windows Serverのひな型(ゴールデンイメージ)をSysprepで作成し、コード1本で自動展開できる環境を構築してきました。しかし実際の検証環境ではクライアントOSも必要になります。そこで今回はWindows 10とWindows 11のひな型も作成し、サーバーと同じようにコードから自動展開できる仕組みを整えていきます。
Hyper-V仮想マシンの作成
まずHyper-V上に仮想マシンを2台作成します。
| 項目 | Windows 10 | Windows 11 |
|---|---|---|
| 世代 | 第2世代 | 第3世代 |
| メモリ | 8GB | 8GB |
| ネットワーク | 接続しない | 接続しない |
ポイント:ネットワークには接続しないこと
ひな型作成時にネットワークへ接続すると、Windows Updateが走るなど想定外の動作が起きやすくなります。ネットワークを切断した状態でセットアップを進めるほうが格段に楽です。
Windows 11特有の設定
Windows 11ではセキュリティ要件が厳しいため、仮想マシンのセキュリティ設定でTPM(トラステッドプラットフォームモジュール)を必ず有効化してください。有効にしないとISOからのインストール自体が弾かれてしまいます。
初回セットアップとAdministratorアカウントの準備
仮想マシンが起動したら、初期セットアップウィザードをローカルアカウントで進めます。ネットワーク未接続の状態であれば、Microsoftアカウントを求められることなくローカルユーザーでのセットアップが可能です。
セットアップ完了後は以下の手順でAdministratorアカウントを有効化します。
- セットアップ時に作成したローカルユーザーで一度ログオン
- 「コンピューターの管理」からセットアップ用ユーザーを削除
- ビルトイン
Administratorアカウントを有効化 Administratorでログオンし直す
このシリーズでは、Ansibleから管理する際にビルトインAdministratorで統一することでシンプルな管理を実現しています。なお、通常Sysprep実行後にAdministratorは無効化されますが、応答ファイル内に無効化を防ぐ記述を入れることで有効状態を維持します。
WinRMのセットアップ(オフライン環境での対処)
AnsibleからWindows VMをリモート管理するにはWinRMの構成が必要です。通常はインターネットからスクリプトをダウンロードして実行しますが、今回はネットワーク未接続のため別の方法を使います。
Hyper-Vゲストサービスを使ったファイル転送
Hyper-Vの「統合サービス」にあるゲストサービスを有効化すると、Copy-VMFileコマンドレットでホストからゲストへファイルをコピーできます。ネットワーク接続が不要なため、オフライン環境で非常に役立ちます。
まずゲストVM上で一時ディレクトリを作成しておきます。
New-Item -ItemType Directory -Path C:\temp
次にホスト側のHyper-V管理端末からスクリプトをゲストにコピーします。
Copy-VMFile "Windows10" `
-SourcePath "C:\temp\ConfigureRemotingForAnsible.ps1" `
-DestinationPath "C:\temp\ConfigureRemotingForAnsible.ps1" `
-CreateFullPath `
-FileSource Host
WinRM構成スクリプトの実行
ゲストVM内でPowerShellを管理者として起動し、スクリプト実行ポリシーを変更してからスクリプトを実行します。
Set-ExecutionPolicy Unrestricted -Force
cd C:\temp
.\ConfigureRemotingForAnsible.ps1
これでWinRMの設定と証明書の作成が完了し、AnsibleからリモートでVMを管理できる状態になります。Windows 10・Windows 11の両方で同じ手順を実施します。
応答ファイル(Unattend.xml)の作成
応答ファイルはWindows システムイメージマネージャー(Windows SIM)で作成します。クライアント版でポイントとなる設定項目を以下に示します。
Specializeパス
| 設定項目 | 内容 |
|---|---|
| コンピューター名 | ランダム生成 |
| プロダクトキー | 指定 |
| ロケール・タイムゾーン | 日本設定 |
| WinRM有効化 | microsoft-windows-shell-setup で設定 |
oobeSystemパス(クライアント特有の設定)
ここがサーバー版と異なる主要箇所です。
<AutoLogon>
<Enabled>true</Enabled>
<Username>Administrator</Username>
<Password>
<Value>(パスワード)</Value>
<PlainText>true</PlainText>
</Password>
</AutoLogon>
<UserAccounts>
<LocalAccounts>
<LocalAccount>
<Name>Administrator</Name>
<Password>
<Value>(パスワード)</Value>
</Password>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
自動ログオンを設定する理由:Sysprep後の初回起動時にビルトインAdministratorで自動ログオンさせることで、Administratorアカウントが有効化されます。また、ProtectYourPCを3に設定してライセンス条項への自動承諾も組み込んでいます。
Sysprepの実行とゴールデンイメージの保管
応答ファイルをVMにコピーして、Sysprepを実行します。
Copy-VMFile "Windows10" `
-SourcePath "C:\answer\unattend.xml" `
-DestinationPath "C:\temp\unattend.xml" `
-CreateFullPath `
-FileSource Host
ゲストVM内でSysprepを実行します。
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /unattend:C:\temp\unattend.xml
シャットダウンが完了したら、VHDXファイルをゴールデンイメージとして保管します。ファイル名に-goldを付けて管理するとわかりやすいです。
Ansibleプレイブックからの自動展開
Ansibleのインベントリファイルにクライアントの定義を追加します。
# インベントリ例(既存のDCに追加)
windows10:
ansible_host: 192.168.x.x
windows11:
ansible_host: 192.168.x.x
プレイブック側では以下のような形でWindows 10・Windows 11のVMを定義します。
- name: Windows 10
type: win10
source: win10-gold
ip: 192.168.x.x
- name: Windows 11
type: win11
source: win11-gold
ip: 192.168.x.x
プレイブックを実行すると、以下の処理が自動で行われます。
- ゴールデンイメージのVHDXをコピーしてVMを作成
- VMを起動(Sysprep済みのため自動構成が開始)
- 応答ファイルを読み取り、コンピューター名・パスワード・ネットワーク設定を適用
- WinRMで接続できるまで待機(タイムアウトは余裕を持って300秒以上に設定)
- 接続確認後、以降の構成タスクを実行
展開完了後は、設定したIPアドレスでPingが通り、インターネットへの疎通も確認できます。
サーバー版との応答ファイルの差分まとめ
| 設定項目 | サーバー版 | クライアント版 |
|---|---|---|
| 自動ログオン | 不要 | 必要(Administrator有効化のため) |
| ユーザーアカウント設定 | ほぼ同様 | ローカルAdministratorのパスワード指定が必要 |
| TPM設定 | 不要(第2世代) | 必要(Windows 11・第3世代) |
| その他基本設定 | 共通 | 共通 |
Windows 11のローカルアカウントについて
Windows 11のホームエディションでオンライン接続時にMicrosoftアカウントが必須になるという話題がありますが、応答ファイルを使う場合はローカルアカウントでのセットアップが引き続き可能です。また、ネットワーク未接続の状態では物理的にMicrosoftアカウントを使えないため、Microsoftがそのようなユーザーを切り捨てる選択肢を取ることは考えにくく、今後もネット未接続時はローカルアカウントでセットアップできると予想されます。
まとめ
今回はWindows 10とWindows 11のクライアントOSについて、Sysprepと応答ファイルを使ったゴールデンイメージの作成と、Ansibleプレイブックによる全自動展開の仕組みを構築しました。
- ネットワーク未接続でのひな型作成と、Hyper-Vゲストサービスを使ったオフラインファイル転送
- ビルトインAdministratorの有効化と自動ログオン設定が、クライアント版の応答ファイルにおける重要ポイント
- Windows 11ではTPM有効化が必須
これにより、インベントリにWindowsサーバー・Windows 10・Windows 11の記述を追加するだけで、検証環境を丸ごとコードで再現できるようになりました。次回はこの環境を活用したさらなる構成自動化を進めていきます。