Azure Virtual Desktopで使う日本語UIのWindows 10 + Officeのマスターイメージを作る

MicrosoftのAzure Virtual Desktop (AVD)で利用するWindowsデスクトップ環境を作ります。
AzureでMarketplaceから提供されているイメージをひな形として、日本語UIを持ったWindows 10 multi-session (FSLogix入り)の上に、Microsoft 365 Apps (WordとかExcelとか)が入ったマスターイメージを作っていきます。
一番作業手順が少ない例を目指しています。

# 完成するマスターイメージ
- Windows 10 Enterprise multi-session
- FSLogix (Profile Container)
- Microsoft 365 Apps
- Microsoft OneDrive
- Microsoft Teams メディア最適化
- 日本語UI

単にアプリをインストールするだけではなくて、AVDで利用するイメージ用にOSの設定なども行います。

# 作成フロー

1. [Marketplaceで提供されているイメージを準備](#marketplaceで提供されているイメージを準備)
2. [Windows 10の日本語化](#windows-10の日本語化)
3. [Windows Updateで最新化](#windows-updateで最新化)
4. [Microsoft 365 Apps 日本語版のインストール](#microsoft-365-apps-日本語版のインストール)
6. [イメージの汎用化](#イメージの汎用化)
7. [マスターイメージのキャプチャ](#マスターイメージのキャプチャ)

冗長にならないように、仮想マシンの操作などAzureの基本的な部分は解説を省略しています。

# Marketplaceで提供されているイメージを準備
英語版のイメージをもとに、日本語イメージを作成していきます。
仮想マシンを作成する際、Windows 10 Enterprise multi-sessionを選択します。Microsoft 365 Appsも入ったイメージもありますが、日本語版をインストールするのでここでは不要です。
![select-image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3db75fc5-3ed3-fbc1-1bd5-5e9a12402b56.png)
機能面もそうですが、[サポートライフサイクル](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/windows-10-multisession-faq#which-windows-10-enterprise-multi-session-versions-are-supported)の観点からも、なるべく最新のバージョンを選択することをお勧めします。

作成する仮想マシンの構成はデフォルト、もしくは標準的なもので十分です。

# Windows 10の日本語化
[Settings]、[Time & Language]、[Language]、[Preferred languages]から[Add a language]を選んで、日本語をインストールします。
![win1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/74706634-fcc7-e3b4-11ed-89d47c568377.png)
インストール中、[Set as my Windows display language]をオンにしておきます。なお、この画面はWindows 10のバージョンによって異なることがあります。
![win2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/fc62c451-d586-17f0-355d-5329c0c87c64.png)
インストールが終われば表示言語の切り替えでサインオフするよう促されるので、いったんサインオフしてもう一度ログインしなおします。
![win3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3dae508a-0ea3-0bbf-4e21-248dd7d55d03.png)

ログインしなおしたデスクトップで[設定]、[時刻と言語]、[地域]と開いていき、[国または地域]に[日本]を指定します。
![win5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/fc24cf40-6e26-cff0-7173-c12fb6d55f73.png)

コントロールパネルを開き、[日付、時刻、または数値の形式の変更]、[管理]、[ようこそ画面と新しいユーザーアカウント]内の[設定のコピー] ボタンを押します。
![win4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/29d6daa2-0ff1-e2ac-39cc-242a5928d016.png)

[ようこそ画面とシステムアカウント]と[新しいユーザーアカウント]のチェックボックスをオンにします。
![win6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/3be41321-4448-7eb6-28ab-2b30acf7edc7.png)
再起動を促されますので、再起動します。

再起動が終われば、ファイアウォールの設定を行います。これは、言語パックをインストールするときだけ必要になる手順です。理由は[このあたり](https://qiita.com/fujinon1109/items/440c614338fe2535b09e)で。
PowerShellを管理者権限で起動して、下記を実行します。

```powershell
netsh advfirewall firewall add rule name="Windows Remote Management (HTTP-In)" dir=in action=allow service=any enable=yes profile=any localport=5985 protocol=tcp
Enable-PSRemoting -Force
```

# Windows Updateで最新化
Windows Updateですべてのアップデートを適用します。
再起動が必要になる場合もあります。

これで、Windows 10の日本語化は完了です。

# Microsoft 365 Apps 日本語版のインストール
[Microsoft Cloud Workshopのここで紹介されている方法](https://github.com/takeokams/MCW-Implementing-Windows-Virtual-Desktop-in-the-enterprise/blob/main/Hands-on%20lab/HOL%20step-by-step%20-%20Implementing%20Windows%20Virtual%20Desktop%20in%20the%20enterprise.md#%E6%BC%94%E7%BF%92-4-wvd-%E3%81%AE%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90)で、スクリプトを使ってインストールします。
このスクリプトを使うことで、

- [マスター VHD イメージを準備してカスタマイズする](https://docs.microsoft.com/ja-jp/azure/virtual-desktop/set-up-customize-master-image)
- [Azure にアップロードする Windows VHD または VHDX を準備する](https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/prepare-for-upload-vhd-image)

で解説されているAVDのイメージに対する推奨設定を自動的に行うことができます。

まず、スクリプトが入ったzipファイルを[ここ](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/shawntmeyer/WVD/tree/master/Image-Build/Customizations)からダウンロードし、Windows 10内の`ドキュメント`フォルダに展開します。
展開したファイルの中の`Customizations\Customizations\Prepare-WVDImage\Office365\Configuration.xml`を右クリックして、`編集`を選びます。
![script1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/5f8dcaf7-573b-64a4-5f2f-0684b79105f8.png)
`Language ID`に`ja-jp`を指定し上書き保存します。

- オリジナルファイル

```
<Configuration>
  <Add OfficeClientEdition="64" Channel="Monthly">
    <Product ID="O365ProPlusRetail">
      <Language ID="en-us" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>
  </Add>
  <Property Name="SharedComputerLicensing" Value="1" />
  <Property Name="PinIconsToTaskbar" Value="TRUE" />
  <Property Name="SCLCacheOverride" Value="0" />
  <Property Name="FORCEAPPSHUTDOWN" Value="FALSE" />
  <Property Name="DeviceBasedLicensing" Value="0" />
  <AppSettings>
    <User Key="software\microsoft\office\16.0\excel\options" Name="defaultformat" Value="51" Type="REG_DWORD" App="excel16" Id="L_SaveExcelfilesas" />
    <User Key="software\microsoft\office\16.0\powerpoint\options" Name="defaultformat" Value="27" Type="REG_DWORD" App="ppt16" Id="L_SavePowerPointfilesas" />
    <User Key="software\microsoft\office\16.0\word\options" Name="defaultformat" Value="" Type="REG_SZ" App="word16" Id="L_SaveWordfilesas" />
  </AppSettings>
  <Display Level="None" AcceptEULA="TRUE" />
<Logging Level="Standard" Path="%WINDIR%\Logs\Software" />
</Configuration>
```

- 変更後

```
<Configuration>
  <Add OfficeClientEdition="64" Channel="Monthly">
    <Product ID="O365ProPlusRetail">
      <Language ID="ja-jp" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>
  </Add>
  <Property Name="SharedComputerLicensing" Value="1" />
  <Property Name="PinIconsToTaskbar" Value="TRUE" />
  <Property Name="SCLCacheOverride" Value="0" />
  <Property Name="FORCEAPPSHUTDOWN" Value="FALSE" />
  <Property Name="DeviceBasedLicensing" Value="0" />
  <AppSettings>
    <User Key="software\microsoft\office\16.0\excel\options" Name="defaultformat" Value="51" Type="REG_DWORD" App="excel16" Id="L_SaveExcelfilesas" />
    <User Key="software\microsoft\office\16.0\powerpoint\options" Name="defaultformat" Value="27" Type="REG_DWORD" App="ppt16" Id="L_SavePowerPointfilesas" />
    <User Key="software\microsoft\office\16.0\word\options" Name="defaultformat" Value="" Type="REG_SZ" App="word16" Id="L_SaveWordfilesas" />
  </AppSettings>
  <Display Level="None" AcceptEULA="TRUE" />
<Logging Level="Standard" Path="%WINDIR%\Logs\Software" />
</Configuration>
```

PowerShellを管理者権限で起動して、スクリプトのあるフォルダーに移動します。

```powershell
cd Documents\Customizations\Customizations\Prepare-WVDImage
```
(カレントフォルダーがユーザーフォルダーであると仮定しています)

下記、実行します。

```powershell
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
.\Prepare-WVDImage.ps1 -DisplayForm
```

下記の画面が表示されるので、必要なアプリを指定して`Execute`を押します。
![script2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/909b99a4-cc31-3412-ecab-c19320f3c47a.png)

- Install Office 365 ProPlus

月次チャンネルで最新バージョンのMicrosoft 365 Apps for enterpriseをインストールします。
パラメータは必要に応じて変更します。指定しないこともできます。

- Install FSLogix Agent

最新版のFSLogixをインストールします。プロファイルを置くVHDの場所をここで指定することもできますし、グループポリシーで指定することも可能です。

- Install OneDrive per Machine

マルチセッションでOneDriveが使えるようにインストールします。既知のフォルダー(デスクトップやドキュメントなど)をOneDriveに置くときに、[Known Folder Move](https://docs.microsoft.com/ja-jp/onedrive/redirect-known-folders)のためのAzure ADのテナントIDを指定することもできます。

- Install Microsoft Teams per Machine

最新バージョンのMicrosoft Teamsをインストールすることができます。メディア最適化の設定もされます。

- Install Microsoft Edge Enterprise

最新バージョンの[ビジネス向けEdge](https://www.microsoft.com/ja-jp/edge/business)をインストールすることができます。

- Disable All Software Updates

マスターイメージを固定化して、アップデートを停止させます。

- Remove inbox Windows 10 Apps

仮想デスクトップではあまり使わないストアアプリを削除します。削除するリストは、展開したスクリプトフォルダの中の`Customizations\Customizations\RemoveApps\RemoveApps.xml`に記述されています。FSLogixの環境では、ログインが速くなる可能性があります。

- Run System Clean Up (CleanMgr.exe)

ディスクをイメージ用に[CleanMgr.exe](https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/cleanmgr)を使ってクリーンアップします。

# イメージの汎用化
**アプリケーションのインストールが終われば、再起動**し、SysPrepを、管理者モードのコマンドラインから、下記のように実行します。終われば自動的にシャットダウンされます。

```console
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown
```

# マスターイメージのキャプチャ
イメージを保存するため、仮想マシンのキャプチャを行います。
状態が停止済みであることを確認して、キャプチャを押します。
![host-vm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/f2f71413-5323-325a-a5fb-47dac870440d.png)
これで、ホストプールに展開して利用することができます。

# IME利用の注意点

- デスクトップクライアント

キーマップにご注意ください。クライアントで109キーボードを使っているにも関わらず101キーボードになっている場合は、クライアントのハードウェアキーボードの設定をまず確認するとよいでしょう。
また、バージョン2004のイメージは、WindowsデスクトップクライアントからだとIMEが現在利用できないようなので、これもご注意ください。Webクライアントは利用できます。

- Webクライアント

IMEを利用するように設定する必要があります。
![client1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684720/73725201-0199-70d7-cfc2-65fea022f1ea.png)

<font color="Red">**注意**: 2021年4月現在、日本語（106/109 キー）を選択している際に、￥(円マーク)および＼(バックスラッシュ)キーが反応しません。
この問題については[ここ](https://jpwinsup.github.io/blog/2020/12/25/RemoteDesktopService/WVD/japanese-keyboard-not-working-on-wvd-web-client/)に解説されています。</font>