BitLocker有効化をPowershellコマンドだけでやる(Windows11)

# 1.概要
Windows11 の BitLocker 有効化を、Powershell コマンドのみで行う方法を調査しました。Windows11 のキッティング効率化につながれば幸いです。
# 2.コード
結論から言うと、コマンドは以下の通りです。
```Powershell:BitLocker有効化に必要なコマンド
# PINの使用の許可設定
if (-not(Test-Path -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE")) {New-Item "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Force}
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "EnableBDEWithNoTPM" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseAdvancedStartup" -PropertyType "DWord" -Value "1" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPM" -PropertyType "DWord" -Value "2" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMKey" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMKeyPIN" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMPIN" -PropertyType "DWord" -Value "2" -Force

# BitLockerの有効化
$BitLockerPass = ConvertTo-SecureString "12345678" -AsPlainText -Force
Enable-BitLocker -MountPoint "C:" -TpmAndPinProtector $BitLockerPass -UsedSpaceOnly -skiphardwaretest

# 暗号化の状態確認
Get-BitLockerVolume

# 回復キーの設定及び出力
Add-BitLockerKeyProtector -MountPoint "C:" -RecoveryPasswordProtector
(Get-BitLockerVolume -MountPoint C:).KeyProtector | Out-File <任意のファイルパス>

# 最後に必ずPCを再起動してください
```
# 3.内容
例として PIN "12345678" で C ドライブを暗号化します。
これは以下のコマンドで可能です。
```Powershell:BitLocker有効化
$BitLockerPass = ConvertTo-SecureString "12345678" -AsPlainText -Force
Enable-BitLocker -MountPoint "C:" -TpmAndPinProtector $BitLockerPass -UsedSpaceOnly -skiphardwaretest
```
しかし、以下のようなエラーが出ることがあります。
```text:エラー
Add-TpmAndPinProtectorInternal : グループ ポリシー設定では、スタートアップ時の PIN の使用は許可されていません。別の BitLocker スタートアップ オプションを選択してください。 (HRESULT からの例外:0x80310060)
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitLocker\BitLocker.psm1:2099 文字:31
+ ...   $Result = Add-TpmAndPinProtectorInternal $BitLockerVolumeInternal.M ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-TpmAndPinProtectorInternal
```
これを解消するためには、ローカルグループポリシーでPINの使用を許可してやらなければなりません。
* [ ローカルグループポリシーエディター ]を開く
* [ コンピューターの構成 ] > [ 管理用テンプレート ] > [ BitLocker ドライブの暗号化] > [ オペレーティングシステムのドライブ ] を開く
* [ スタートアップ時に追加の認証を要求する ] を設定する。(設定画面は以下のような画面)
![BitLocker_001png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836959/96408a1d-fe3c-7866-617f-bbe5eb89674c.png)
このローカルグループポリシー作成と同等の操作をPowershellコマンドで行います。
具体的にはレジストリ設定を行います。
```Powershell:PINの使用を許可
if (-not(Test-Path -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE")) {New-Item "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Force}
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "EnableBDEWithNoTPM" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseAdvancedStartup" -PropertyType "DWord" -Value "1" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPM" -PropertyType "DWord" -Value "2" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMKey" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMKeyPIN" -PropertyType "DWord" -Value "0" -Force
New-ItemProperty -LiteralPath "HKLM:\SOFTWARE\Policies\Microsoft\FVE" -Name "UseTPMPIN" -PropertyType "DWord" -Value "2" -Force
```
その後、再度 Enable-BitLocker コマンドを実行すると、エラーなくコマンドが完了し、暗号化が始まります。
暗号化には時間がかかることもありますが、進捗は以下のコマンドで確認できます。
```Powershell:状態確認コマンド
Get-BitLockerVolume
```
Encryption Percentage が 100% 未満で、Protection Status が Off の場合は、まだ完了していませんので待機します。
```text:暗号化が完了していない状態
VolumeType      Mount CapacityGB VolumeStatus           Encryption KeyProtector              AutoUnlock Protection
                Point                                   Percentage                           Enabled    Status
----------      ----- ---------- ------------           ---------- ------------              ---------- ----------
OperatingSystem C:        237.36 EncryptionInProgress   78         {TpmPin}                             Off
```
Encryption Percentage が 100% で、Protection Status が On の場合は完了です。
```text:暗号化が完了した状態
VolumeType      Mount CapacityGB VolumeStatus           Encryption KeyProtector              AutoUnlock Protection
                Point                                   Percentage                           Enabled    Status
----------      ----- ---------- ------------           ---------- ------------              ---------- ----------
OperatingSystem C:        237.36 FullyEncrypted         100        {TpmPin}                             On
```
回復キーは以下のコマンドで設定できます。
```Powershell:回復キー設定
Add-BitLockerKeyProtector -MountPoint "C:" -RecoveryPasswordProtector
```
コマンドを実行すると以下のような出力があるので、回復キー(48桁の数字)をメモしておくのが良いです。
```text:回復キー設定コマンド実行時の出力
警告: 必要な操作:

1. この数字の回復パスワードを、使用しているコンピューター以外のセキュリティ保護された場所に保存してください:

<48桁の数字>

データの消失を防ぐために、このパスワードを直ちに保存してください。このパスワードは、暗号化ボリュームのロックを解除できるようにします。
```
もしくは以下のコマンドで、回復キーをファイル出力することもできます。
```Powershell:回復キーのファイル出力
(Get-BitLockerVolume -MountPoint C:).KeyProtector | Out-File <任意のファイルパス>
```
:::note warn
警告
最後に必ずPCを再起動してください。
:::