Windowsイメージ操作まとめ

## 検証環境
* WindowsPE v10.0.15063(Win10 1703ベース)

WindowsPEの作り方については以下のページを参照
https://qiita.com/SkyLaptor/items/204245cf6bb4fee5b19d

## 注意
UEFIシステムでイメージ操作をする際にはWindowsPEもUEFIモードで起動し、BIOSシステムでイメージ操作をする際にはWindowsPEもBIOSモードで起動すること。


## ネットワークドライブをマウントする
イメージ操作はファイル共有を用いるのが便利で高速であるため、適当なファイル共有先をネットワークドライブとしてマウントしておくと良い。

```bat:
net use {マウント先} {共有先}
```
```bat:実行例
net use n: \\192.168.1.100\share
```


## 電源プランを高パフォーマンスにする
Windowsイメージ操作をする際には、高速化のために操作前に実行しておくと良い。

```bat:
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
```

なお、Windows10 1903ベースのPEであれば「究極のパフォーマンス」というなんだか凄そうなプランも設定可能。

```
powercfg /s e9a42b02-d5df-448d-aa00-03f14749eb61
```

## Windowsイメージを取得する
Windows上のパーティションをWindowsイメージとして取り出す。

```ps1:

Dism /Capture-Image /ImageFile:{保存先} /CaptureDir:{取得先} /Name:{イメージ名} /Description:{イメージ説明} /Compress:fast /CheckIntegrity
```
```ps1:実行例
Dism /Capture-Image /ImageFile:N:\hybrid.wim /CaptureDir:C:\ /Name:"Hybrid Image" /Description:"Hybrid Image Desc" /Compress:fast /CheckIntegrity
```



## パーティションを設定する
イメージ適用のため、ディスクをフォーマットする。
**フォーマットにより既存のデータは全て消去されるため、データが残っていれば退避しておくこと。**

```bat:
rem UEFIシステム向け
diskpart /s partition_uefi.txt

rem BIOSシステム向け
diskpart /s partition_bios.txt
```

```bat:partition_uefi.txt
rem === Disk GPT Format ===
select disk 0
clean
convert gpt

rem === Create WindowsRE Partition ===
rem create partition primary size=500
rem format quick fs=ntfs label="Windows RE tools"
rem set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
rem gpt attributes=0x8000000000000001
rem assign letter=R

rem === Create EFI-System Partition ===
create partition efi size=100
format quick fs=fat32 label="System"

rem === Create Microsoft-Reserved Partition ===
create partition msr size=16

rem === Create WindowsOS Partition ===
create partition primary
rem create partition primary size=102400
format quick fs=ntfs
assign letter=C

rem === Create Data Partition ===
rem create partition primary
rem format quick fs=ntfs
rem assign letter=D

rem === Show Result ===
list volume
exit
```
```bat:partition_bios.txt
rem === Disk MBR Format ===
select disk 0
clean

rem === Create WindowsRE Partition ===
rem create partition primary size=450
rem format quick fs=ntfs label="Windows RE tools"
rem assign letter=R

rem === Create System Partition ===
create partition primary size=100
format quick fs=ntfs label="System"
assign letter=S
active

rem === Create WindowsOS Partition ===
create partition primary
rem create partition primary size=102400
format quick fs=ntfs
assign letter=C

rem === Create Data Partition ===
rem create partition primary
rem format quick fs=ntfs
rem assign letter=D

rem === Show Result ===
list volume
exit
```


## Windowsイメージを適用する
取得したWindowsイメージを適用する。

```ps1:
Dism /Apply-Image /ImageFile:{WIMファイル} /Index:{インデックス番号} /ApplyDir:{適用先}
```
```ps1:実行例
Dism /Apply-Image /ImageFile:N:\hybrid.wim /Index:1 /ApplyDir:C:\
```


## 起動ドライブとしてマークする
OSが入っているパーティションは起動ドライブとする必要があるが、Windowsイメージを適用しただけでは起動ドライブとして認識されていないので起動できない。よって、bcdbootコマンドで起動ドライブとしてマークする必要がある。
なお、CドライブにOSパーティション、Sドライブにシステムパーティション(※BIOSシステムのみ)が適用されているものとする。

```bat:
rem UEFIシステム向け
bcdboot C:\Windows /l ja-jp
rem BIOSシステム向け
bcdboot C:\Windows /l ja-jp /s S:
```


## Windowsイメージに重ねて取得する
既存のWindowsイメージに対して、更に重ねる形でWindowsイメージを取得することが出来る。
利点としては重複ファイルが最適化されるため、イメージサイズを大幅に小さくすることが出来る。

```ps1:
Dism /Append-Image /ImageFile:{WIMファイル} /CaptureDir:{取得先} /Name:{イメージ名} /Description:{イメージ説明}
```
```ps1:実行例
Dism /Append-Image /ImageFile:hybrid.wim /CaptureDir:C:\ /Name:"Hybrid Image2" /Description:"Hybrid Image Desc2"
```

この方法で取得した場合、インデックス番号によりアクセスするイメージが変わることに注意する。もとのイメージはインデックス番号1が振られており、重ねていく毎に1ずつ上がっていく。


## 重合WindowsイメージからWindowsイメージを取得する
いくつかのWindowsイメージが重なった重合Windowsイメージファイルから、インデックス番号を指定してWindowsイメージを取り出す。

```ps1:
Dism /Export-Image /SourceImageFile:{重合WIMファイル} /Index:{インデックス番号} /DestinationImageFile:{WIMファイル}
```


## Windowsイメージを分割する
既存のWindowsイメージを分割することで、FAT32フォーマットのデバイスにイメージを格納したり、DVDに分割して保管しておくことが出来るようになる。
うまく使うことで、WindowsPEメディアと一緒にイメージを格納してスタンドアロンの復元環境を用意したり出来る。

```ps1:
Dism /Split-Image /ImageFile:{WIMファイル} /SWMFile:{SWMファイル} /FileSize:{分割サイズ(MB)} /CheckIntegrity
```
```ps1:実行例
Dism /Split-Image /ImageFile:N:\hybrid.wim /SWMFile:N:\hybrid.swm /FileSize:4096 /CheckIntegrity
```

## 分割Windowsイメージを適用する
分割したイメージを適用する際には、通常のイメージ適用と少しだけ異なるコマンドを実行する。

```ps1:
Dism /Apply-Image /ImageFile:{SWMファイル} /SWMFile:{SWMファイル} /Index:{インデックス番号} /ApplyDir:{適用先}
```
```ps1:実行例
Dism /Apply-Image /ImageFile:hybrid.swm /SWMFile:hybrid*.swm /Index:1 /ApplyDir:C:\
```

## Windowsイメージの情報を確認する
Windowsイメージを参照して、インデックス番号や名前・説明などを確認できる。

```ps1:
Dism /Get-WIMInfo /WIMFile:{WIMファイル}
```
```ps1:実行例
Dism /Get-WIMInfo /WIMFile:hybrid.wim
```


## IPv4アドレスを割り当てる
デフォルトはDHCPになっているため、DHCP環境であればIPアドレスが自動で割り当てられる。DHCP環境でない場合には、以下のコマンドにて静的にIPアドレスを割り当てる必要がある。
なお、適用には少しタイムラグがあるので少し待つこと。

```bat:
netsh interface ip set address {NIC名} static {IPv4アドレス} {IPv4ネットマスク}
```
```bat:実行例
netsh interface ip set address "イーサネット" static 192.168.1.100 255.255.255.0
```


## パーティションにドライバーを適用する
イメージを正常に適用してもドライバー不足により起動できず、ブルースクリーンが発生することがある。その場合は以下のコマンドにてドライバーを後入れすることで応急対処できる。起動後は正規の手順にてドライバーをしっかりインストールすること。

```ps1:
# ドライバー(.inf)を適用
Dism /Image:{適用先} /Add-Driver /Driver:{ドライバーファイル} /ForceUnsigned
# フォルダ内のドライバー(.inf)を一括適用
Dism /Image:{適用先} /Add-Driver /Driver:{ドライバーフォルダ} /Recurse /ForceUnsigned
```
```ps1:実行例
# ドライバー(.inf)を適用
Dism /Image:C:\ /Add-Driver /Driver:N:\Drivers\driver.inf /ForceUnsigned
# フォルダ内のドライバー(.inf)を一括適用
Dism /Image:C:\ /Add-Driver /Driver:N:\Drivers /Recurse /ForceUnsigned
```

## 参考
https://msdn.microsoft.com/ja-jp/library/hh825258.aspx