対象読者: Azure 管理者・インフラ担当者
対象OS: Windows 11
最終更新: 2026-05-13
参考: Microsoft Learn - VM のプロビジョニング解除・一般化
目次
- 概要
- イメージ種別の選択
- 全体フロー
- 前提条件・事前確認
- Phase 1: ソースVMの準備
- Phase 2: Sysprep による一般化
- Phase 3: Azure 側での一般化マーク
- Phase 4: イメージのキャプチャ(Azure Compute Gallery)
- Phase 5: イメージからVMを作成する
- トラブルシューティング
- 注意事項まとめ
1. 概要
Azure VM のカスタムイメージを作成することで、以下のメリットが得られます。
- 同一構成の VM を繰り返しデプロイできる(ゴールデンイメージ運用)
- アプリケーション・設定・Windows Update 済みの状態から VM を起動できる
- 複数リージョン・サブスクリプションへのイメージ配布が可能
Windows VM のイメージ作成には、Sysprep(一般化) を使用してマシン固有情報を削除してからキャプチャする方法と、固有情報を保持したまま 特殊化イメージ としてキャプチャする方法の 2 種類があります。
本手順書では 一般化イメージ(Sysprep使用) を対象とします。
2. イメージ種別の選択
| 種別 | 説明 | Sysprep |
|---|---|---|
| 一般化 (Generalized) | SID・ホスト名・ユーザーアカウントをリセット。複数台への展開に最適 | 必要 |
| 特殊化 (Specialized) | マシン固有情報を保持。1台のクローンに近い用途 | 不要 |
本手順書は「一般化イメージ」を対象とします。
3. 全体フロー
4. 前提条件・事前確認
4.1 ソース VM の要件
| 項目 | 要件 |
|---|---|
| OS | Windows 11(Gen 2 推奨) |
| 状態 | 実行中(作業前) |
| BitLocker | 無効化済み(Sysprep 前に必須) |
| ドメイン参加 | 離脱済み(ドメイン参加VMの一般化は非推奨) |
| MDM/Intune | 未登録(登録済みの場合、Sysprep失敗の原因となる) |
| ディスク暗号化 | 無効(Azure Disk Encryption も無効化すること) |
4.2 インストール済みアプリの確認
一部のアプリケーションは Sysprep に対応していません。以下を事前に確認してください。
Sysprep非対応の代表例:
- 一部のセキュリティソフト(要確認)
- Microsoft Store アプリの一部(更新途中のもの)
- 仮想化エージェント(別途対応が必要)
4.3 Sysprep 実行可能回数の制限
Windows Server 2012 以降・Windows 11: 最大 1001 回
それ以外の旧 OS: 3 回
Sysprep の実行回数上限に達すると、以降の一般化が失敗します。
4.4 元VMの保護(推奨)
重要: VM を一般化すると、その VM は 二度と起動できません。
元 VM の状態を保護するため、作業前に OS ディスクのスナップショットを取得することを強く推奨します。
# スナップショット作成例(Azure PowerShell)
$vm = Get-AzVM -ResourceGroupName "myRG" -Name "mySourceVM"
$osDisk = Get-AzDisk -ResourceGroupName "myRG" -DiskName $vm.StorageProfile.OsDisk.Name
$snapshotConfig = New-AzSnapshotConfig `
-SourceUri $osDisk.Id `
-Location $vm.Location `
-CreateOption Copy
New-AzSnapshot `
-ResourceGroupName "myRG" `
-SnapshotName "mySourceVM-snapshot" `
-Snapshot $snapshotConfig
5. Phase 1: ソースVMの準備
ソース VM に必要な設定・アプリをすべて行ってから Sysprep を実行します。
5.1 BitLocker の無効化手順
BitLocker が有効な場合は必ず無効化してください。
REM 管理者コマンドプロンプトで実行
manage-bde -off C:
REM 復号化の進行状況を確認
manage-bde -status C:
Conversion Status: Fully Decrypted になるまで待機してから次の手順に進みます。
6. Phase 2: Sysprep による一般化
6.1 CD/DVD-ROM の有効化確認
Azure プラットフォームは、一般化イメージから VM を作成するときに ISO ファイルを DVD-ROM にマウントします。DVD-ROM が無効の場合、VM が OOBE 画面で停止します。
管理者コマンドプロンプトで以下を実行して有効化します:
REM CD/DVD-ROM を有効化
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cdrom /v start /t REG_DWORD /d 1 /f
6.2 リムーバブルストレージポリシーの確認
グループポリシーで「すべてのリムーバブル記憶域へのアクセス拒否」が有効になっていると Sysprep が失敗します。
確認場所:コンピューターの構成 > 管理用テンプレート > System > リムーバブル記憶域アクセス
→ 「すべてのリムーバブル記憶域クラス: すべてのアクセスを拒否する」が 無効 になっていることを確認
6.3 Panther ディレクトリの削除
過去の Sysprep ログが残っていると、次回の Sysprep が失敗することがあります。
REM 管理者コマンドプロンプトで実行
rd /s /q C:\Windows\Panther
6.4 Sysprep の実行
REM %windir%\System32\Sysprep ディレクトリへ移動
cd /d C:\Windows\System32\Sysprep
REM Sysprep を実行(VM 自動シャットダウン)
sysprep.exe /generalize /shutdown /oobe
オプション解説:
| オプション | 説明 |
|---|---|
/generalize |
マシン固有情報(SID・ホスト名等)を削除 |
/shutdown |
処理完了後にVMをシャットダウン |
/oobe |
次回起動時に Out-of-Box Experience(初期セットアップ)を開始 |
/mode:vm |
Azure VM 環境向け最適化(オプション) |
重要:
/unattendスイッチ(応答ファイル指定)は Azure ではサポートされていません。
6.5 Sysprep 完了の確認
Azure Portal で VM の状態が 「停止済み」 (Stopped) になっていることを確認します。
(「停止済み(割り当て解除)」ではなく「停止済み」の状態が正常)
7. Phase 3: Azure 側での一般化マーク
Sysprep でシャットダウンされた VM を、Azure プラットフォーム上で「一般化済み」としてマークします。
7.1 方法A: Azure PowerShell
# VM の割り当て解除
Stop-AzVM `
-ResourceGroupName "myResourceGroup" `
-Name "mySourceVM" `
-Force
# VM を一般化済みとしてマーク
Set-AzVM `
-ResourceGroupName "myResourceGroup" `
-Name "mySourceVM" `
-Generalized
7.2 方法B: Azure CLI
# VM の割り当て解除
az vm deallocate \
--resource-group myResourceGroup \
--name mySourceVM
# VM を一般化済みとしてマーク
az vm generalize \
--resource-group myResourceGroup \
--name mySourceVM
7.3 方法C: Azure Portal
- Azure Portal で対象 VM を開く
- 左メニュー「概要」ページを確認
- VM が 「停止済み(割り当て解除)」 状態になっていることを確認
- 上部ツールバーの 「キャプチャ」 ボタンをクリック(次フェーズへ進む)
注意:
Set-AzVM -Generalizedまたはaz vm generalizeを実行した後、VM は 二度と起動できません。
8. Phase 4: イメージのキャプチャ(Azure Compute Gallery)
Azure Compute Gallery(旧: Shared Image Gallery)を使用することを推奨します。
Azure Compute Gallery vs レガシマネージドイメージ:
| 機能 | Azure Compute Gallery | レガシ マネージドイメージ |
|---|---|---|
| バージョン管理 | ✅ あり | ❌ なし |
| 複数リージョンレプリカ | ✅ あり | ❌ なし |
| Gen2 VM サポート | ✅ あり | ❌ なし |
| クロスサブスクリプション共有 | ✅ あり | ❌ なし |
| 推奨 | 推奨 | 非推奨(レガシ) |
8.1 ギャラリーの作成
Azure PowerShell
# リソースグループの作成(既存の場合は不要)
$resourceGroup = New-AzResourceGroup `
-Name "myGalleryRG" `
-Location "japaneast"
# ギャラリーの作成
$gallery = New-AzGallery `
-GalleryName "myGallery" `
-ResourceGroupName $resourceGroup.ResourceGroupName `
-Location $resourceGroup.Location `
-Description "組織共通のイメージギャラリー"
Azure CLI
# リソースグループの作成(既存の場合は不要)
az group create \
--name myGalleryRG \
--location japaneast
# ギャラリーの作成
az sig create \
--resource-group myGalleryRG \
--gallery-name myGallery \
--location japaneast
8.2 イメージ定義の作成
イメージ定義はイメージのメタデータ(OS種別・状態・Publisher/Offer/SKU)を管理します。
Azure PowerShell
$imageDefinition = New-AzGalleryImageDefinition `
-GalleryName $gallery.Name `
-ResourceGroupName $gallery.ResourceGroupName `
-Location $gallery.Location `
-Name "Win11-GoldenImage" `
-OsState generalized ` # Sysprep済みのため generalized
-OsType Windows `
-HyperVGeneration V2 ` # Windows 11 は Gen2 推奨
-Publisher "MyOrg" `
-Offer "Windows11" `
-Sku "22H2-Enterprise"
Azure CLI
az sig image-definition create \
--resource-group myGalleryRG \
--gallery-name myGallery \
--gallery-image-definition Win11-GoldenImage \
--publisher MyOrg \
--offer Windows11 \
--sku 22H2-Enterprise \
--os-type Windows \
--os-state generalized \
--hyper-v-generation V2
8.3 イメージバージョンの作成(VMからキャプチャ)
イメージバージョン名の形式: メジャー.マイナー.パッチ(例: 1.0.0)
Azure PowerShell
# ソースVMのリソースID取得
$sourceVM = Get-AzVM `
-ResourceGroupName "myResourceGroup" `
-Name "mySourceVM"
# レプリケーション先の設定
$region1 = @{Name='Japan East'; ReplicaCount=2}
$region2 = @{Name='Japan West'; ReplicaCount=1}
$targetRegions = @($region1, $region2)
# イメージバージョンの作成(非同期実行)
$job = New-AzGalleryImageVersion `
-GalleryImageDefinitionName $imageDefinition.Name `
-GalleryImageVersionName "1.0.0" `
-GalleryName $gallery.Name `
-ResourceGroupName $gallery.ResourceGroupName `
-Location $gallery.Location `
-TargetRegion $targetRegions `
-SourceImageId $sourceVM.Id.ToString() `
-PublishingProfileEndOfLifeDate "2030-12-01" `
-AsJob
# 進行状況の確認
$job.State
Azure CLI
# ソースVMのリソースIDを取得
SOURCE_VM_ID=$(az vm show \
--resource-group myResourceGroup \
--name mySourceVM \
--query id \
--output tsv)
# イメージバージョンの作成
az sig image-version create \
--resource-group myGalleryRG \
--gallery-name myGallery \
--gallery-image-definition Win11-GoldenImage \
--gallery-image-version 1.0.0 \
--target-regions "japaneast=2" "japanwest=1" \
--virtual-machine "$SOURCE_VM_ID" \
--end-of-life-date "2030-12-01"
8.4 Azure Portal でのキャプチャ手順
9. Phase 5: イメージからVMを作成する
9.1 Azure PowerShell
# 変数の設定
$resourceGroup = "myNewVMRG"
$location = "japaneast"
$vmName = "myNewVM"
# リソースグループの作成
New-AzResourceGroup -Name $resourceGroup -Location $location
# イメージ定義から VM を作成(常に最新バージョンを使用)
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $vmName `
-Image $imageDefinition.Id `
-VirtualNetworkName "myVNet" `
-SubnetName "mySubnet" `
-SecurityGroupName "myNSG" `
-PublicIpAddressName "myPublicIP"
9.2 Azure CLI
az vm create \
--resource-group myNewVMRG \
--name myNewVM \
--image "/subscriptions/<SubID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/Win11-GoldenImage/versions/latest" \
--admin-username azureuser \
--location japaneast
9.3 Azure Portal での手順
- 「仮想マシン」→「作成」→「Azure 仮想マシン」
- 「イメージ」フィールドで「すべてのイメージを表示」をクリック
- 「マイイメージ」タブ → 「Azure Compute Gallery」から対象イメージを選択
- 通常の VM 作成手順に従って設定・作成
10. トラブルシューティング
10.1 よくあるエラーと対処法
10.2 Sysprep エラーログの確認場所
C:\Windows\System32\Sysprep\Panther\setuperr.log
C:\Windows\System32\Sysprep\Panther\setupact.log
10.3 よくある問題と解決策
| 症状 | 原因 | 対処法 |
|---|---|---|
| Sysprep 実行時に「致命的なエラー」 | アプリの非対応・ポリシー問題 | setuperr.log でエラー箇所を特定 |
| VM が OOBE 画面で停止する | CD/DVD-ROM が無効 | レジストリで cdrom サービスを有効化 |
| Store アプリ関連のエラー | アプリが更新途中 | 問題のパッケージを PowerShell で削除 |
| BitLocker エラー | ドライブが暗号化されたまま | manage-bde -off C: で復号後に実行 |
| Sysprep が 3 回以上失敗 | 実行回数超過(古い OS) | 新規 VM からイメージ作成をやり直す |
| 日本語化後の Sysprep 失敗 | 言語パックの不整合 | オフラインインストール用言語パックを使用 |
10.4 Microsoft Store アプリの削除(必要な場合)
# 問題のあるアプリを確認
Get-AppxPackage -AllUsers | Where-Object {$_.NonRemovable -eq $false} | Select Name
# 特定のアプリを削除(例: Microsoft.YourPhone)
Get-AppxPackage -AllUsers -Name "Microsoft.YourPhone" | Remove-AppxPackage -AllUsers
11. 注意事項まとめ
重要事項チェックリスト
実施前に以下を確認してください:
- ソース VM の OS ディスクのスナップショットを取得済み
- BitLocker / Azure Disk Encryption を無効化済み
- CD/DVD-ROM が有効化されていることを確認
- すべてのインストール済みアプリが Sysprep 対応済みであることを確認
- ドメインから離脱済み(ドメイン参加 VM の場合)
- MDM/Intune から登録解除済み
- Windows Update を最新の状態に適用済み
-
C:\Windows\Pantherディレクトリを削除済み - Sysprep 実行後、VM を再起動しないことを認識している
- Azure Compute Gallery を作成済み(またはこれから作成する)