Windows Sysprepエラー回避方法

WindowsのマスターPCの作成の際、Sysprepにてエラーが発生して困ったことはないでしょうか。
今回は代表的なエラー3つについて回避方法を紹介します。

:::note info
この記事ではOSはWindows10以降を対象としています。
:::

# Sysprepのエラーについて

sysprepを実行したときにエラーで止まってしまうことがあります。
この場合は、**C:\Windows\System32\Sysprep\Panther\\** の
**setupact.log(全体ログ)** または **setuperr.log(全体ログのエラー部分のみ記載)** にて
エラー内容が記載されていますので、
エラー内容を参照して修正を実施する必要があります。

エラー内容は下記フォーマットで記載されています。
```text
yyyy-MM-dd hh:mm:dd, Error        エラー内容
```

:::note alert
**致命的なエラー**と表示されてしまった場合はいくら修正しようが必ず同じエラーとなり、
必ずマスターの再作成が必要となります！！
下記回避策は使用できません。
:::

以下に、代表的な例と回避方法を紹介します。

:::note warn
エラーについては、1つ解消したからと言って、
再度Sysprepを掛けると別のエラーが発生することがありますので、
エラーに関してはすべて潰す必要があります。
:::

### BitLockerが掛かっている
BitLockerが掛かった状態ではSysprepはエラーとなります。
エラー内容としては下記のような内容が記載されています。

```text
yyyy-MM-dd hh:mm:dd, Error                 SYSPRP BitLocker-Sysprep: BitLocker is on for the OS volume. Turn BitLocker off to run Sysprep. (0x80310039)
```

Windows10では、
そもそものBitLockerの要件と[モダンスタンバイ](https://docs.microsoft.com/ja-jp/windows-hardware/design/device-experiences/modern-standby-faqs)と呼ばれる機能を満たしているPCであれば
自動でBitLockerを実行してしまう[仕様](https://www.dell.com/support/kbdoc/ja-jp/000124701/%E8%87%AA%E5%8B%95-windows-%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E6%9A%97%E5%8F%B7%E5%8C%96-dell-%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A09)のようです。
ですので、自分ではBitLockerを掛けた覚えがないのに掛かっているためのエラーが表示されることがあります。

コントロールパネルのBitLockerの管理からBitLockerを解除するか、
コマンドプロンプト or PowerShellを管理者で起動し、
下記コマンドを実行して解除してください。
複数のドライブがある場合はすべて解除が必要となります。

```bat
manage-bde -off ドライブ名(例：c:、d:など)
```

必ず解除が終わったことを確認してからSysprepの実行を行ってください。
解除途中ではエラーとなります。
解除確認のコマンド(要管理者)は

```bat
manage-bde -status
```

となり、
**暗号化された割合**が **0.0%** になっていることで確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/d74420f4-a1ab-daca-a191-ecec2265d94a.png)

:::note info
解除確認のコマンドの最後にドライブ名を入力すると対象のドライブのみの確認ができます。
:::


### UWFアプリがインストールされてしまっている
インターネットに接続したタイミングとかで勝手にUWFアプリ(ストアアプリ)がインストールされていることがあり、
これが原因で失敗してしまうことがあります。
対処方法としては、エラーログに記載されているアプリをアンインストールします。

アンインストールはPowershellを起動し、下記コマンドを実行します。
```powershell
get-appxpackage "アプリ名" -allusers | remove-appxpackage
```

:::note info
アプリ名はワイルドカードが使用できるので、一部だけ入力し、残りに*を使うことで正式名称で入力する必要がなくなります。
ただし、ワイルドカード以外の所が少なすぎると、別のアプリも対象となってしまい、
必要なものまで消えてしまう可能性があるので注意してください。

```powershell
#例:名前にxboxが含まれているアプリを全て削除
get-appxpackage "*xbox*" -allusers | remove-appxpackage
```
:::

実際のエラー内容は下記のようになります。

```text
yyyy-MM-dd hh:mm:dd, Error                 SYSPRP Package king.com.CandyCrushSaga_1.2351.1.0_x64__kgqvnymyfvs32 was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.
yyyy-MM-dd hh:mm:dd, Error                 SYSPRP Failed to remove apps for the current user: 0x80073cf2.
```

上記例では
**king.com.CandyCrushSaga_1.2351.1.0_x64__kgqvnymyfvs32**
が邪魔をしていることを示しています。

アンインストールのコマンドとしては、

```powershell
get-appxpackage "king.com.CandyCrushSaga_1.2351.1.0_x64__kgqvnymyfvs32" -allusers | remove-appxpackage
```

でアンインストールできますが、
ワイルドカードを使うことにより、

```powershell
get-appxpackage "*CandyCrushSaga*" -allusers | remove-appxpackage
```

でもアンインストールが可能となります。

### spopk.dllがおかしい
何かしらの影響で **C:\Windows\System32\spopk.dll**に変更が加えられてしまい、
失敗してしまうことがあります。
どうやら原因は[こちら](https://gen.fukatani.org/2020/09/move-home-directory-to-d-drive.html)によるとWindows Updateが完全に完了していないためのようです。
ですので、Windows Updateが完了するまでUpdateを実施する必要があります。
なお、ネットで調べるとspopk.dllを古いバージョンのものと入れ替えるといいとの記載がありあますが、
上記リンクでも記載がありますが、ブルースクリーンの可能性がありますので、
あまり推奨はしません。

実際のエラー内容は下記のようになります。

```text
yyyy-MM-dd hh:mm:dd, Error                 SYSPRP Sysprep_Clean_Validate_Opk: Audit mode can't be turned on if there is an active scenario.; hr = 0x800F0975
yyyy-MM-dd hh:mm:dd, Error                 SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing 'Sysprep_Clean_Validate_Opk' from C:\Windows\System32\spopk.dll; dwRet = 0x975
```

# まとめ
3つの代表的なエラーについて回避方法を紹介しました。
他にもエラーが発生することはあるかと思いますが、
その際はエラーログ見て適時対応してください。
ネットでエラー内容検索すれば大体は回避策載っているかと思います。