パーソルクロステクノロジーの内田です。
Sysprepで生じるユーザ領域にインストールされたアプリケーションに関するエラーについて、解決方法を記載いたします。
Sysprepエラーの概要について
まず当該エラーについてですが、Microsoft Storeアプリに起因しています。
そもそもWindows イメージにはいくつかの組み込みのMicrosoft Storeアプリが存在しています。
プロビジョニング済みアプリと呼ぶのですが、これは対象となるアプリケーションがステージングされており、ユーザがログインすると自動的にインストールするようにスケジュールされています。
プロビジョニングされているアプリと、ユーザにインストールされているアプリケーションで整合性が取れていない場合にSysprepは失敗します。例えば以下のシナリオです。
・プロビジョニングされていないアプリがユーザにインストールされている
・事前にプロビジョニングされているアプリであっても、それが更新されている
・特定のユーザのみでアプリがインストールされている
この制限に抵触しないようにするためのガイダンスとして提供されている情報は以下となります。
・インターネット接続を遮断する
・監査モードで自動更新を無効にする
マスタイメージを日本語化したり、Windows Updateを適用したり、任意のアプリケーションをインストールしたりで、インターネットとの接続を遮断するのは現実的でない場合があります。
※監査モードについては私が勉強不足のため、それによる影響範囲がよくわからないため無視します。
エラー解消方法パターン①
そのため、該当エラーによってSysprepが失敗する場合には以下のコマンドを用いてアプリケーションの実体となるパッケージや、プロビジョニングされているパッケージをアンインストールする対応を取ることになります。
Sysprep実行のたびにログを確認して、一つ一つ削除するのは大変ですので、通常以下のコマンドでまるっと削除を行います。※多数の削除できないエラーが生じますが経験上無視して問題ないと考えています。
$PackageFullNames = @(Get-AppxPackage -AllUsers | Where PublisherId -eq 8wekyb3d8bbwe).PackageFullName
foreach ($PackageFullName in $PackageFullNames) {
Remove-AppxPackage -Package $PackageFullName -AllUsers
Remove-AppxProvisionedPackage -Online -PackageName $PackageFullName -AllUsers
}
稀にPublisherIdが8wekyb3d8bbweでないアプリによってエラーが生じる場合があります。
その場合は「C:\Windows\System32\Sysprep\Panther\setupact.log」を確認し、該当のアプリケーションの削除を行います。
基本的にはこれで当該エラーが解消されるのですが、先日Remove-Appx*のコマンドで削除ができないアプリケーションに遭遇しました。確認したのは以下2つのアプリケーションです。
・Microsoft.SecHealthUI
・Microsoft.DesktopAppInstaller
上記のコマンドで削除ができないアプリケーションはあるのですが、Sysprepの実行を妨げるアプリケーションを削除できないケースは個人的に初めてでした。
※特にMicrosoft.SecHealthUIについてはインターネット接続を遮断した状態でもインストールされてしまい、この方法ではどうしようもありませんでした。
エラー解消方法パターン②
というわけで、もう一つのエラー解消方法について記載します。
Microsoft Storeアプリはユーザログイン時にプロビジョニングアプリがインストールされるということは、冒頭に記載しました。その際アプリはユーザ領域にインストールされます。そのため、ユーザプロファイルを削除してしまえば、該当のアプリケーションについても削除される仕様であると考えられます。
Azure VMにおいては、Azure PortalよりPowershellのコマンドを実行することが可能ですので、そこで以下のコマンドを実行します。

# ユーザプロファイルの削除
@(Get-CimInstance Win32_UserProfile | Where-Object {$_.Special -eq $false}) | Remove-CimInstance
# Sysprepの実行
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown
成功した場合には、仮想マシンの概要画面からVMが停止したことが確認できるはずです。
もし他の要因でSysprepに失敗している場合には、他の要因が考えられますので「C:\Windows\System32\Sysprep\Panther\setupact.log」で内容を確認してください。
今回はこれで以上となります。