かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.239 自動化スクリプト ─ テストの自動化|Hyper-V 小技・裏技集
2026年10月05日配信
執筆者:山内 和朗
「Hyper-V小技・裏技集」シリーズでは、Hyper-Vの仮想環境を利用していて、知っていると便利な小技や裏技を紹介します。前々回は、PowerShell DirectとCopy-VMFileの使いこなしについて説明しました。これらを活用した、VMのゲスト側タスクの自動化例を紹介しています。
※ここで紹介するサンプルコードは、PowerShellスクリプト(.ps1)内に記述することを想定しています。-ErrorAction Stopパラメーターは、エラー時にスクリプト全体を停止します。PowerShellウィンドウに入力して実行した場合は、エラーが発生しても以後のスクリプトは停止しないため、別のエラーが発生する可能性があることに注意してください。
VM環境は、チェックポイントを利用して状態をロールバックしたり、特定時点の状態を保存したりすることができるため、テスト環境として非常に有用です。設定変更や更新プログラムの適用、スクリプトの実行などを行う前にチェックポイントを作成しておけば、問題が発生した場合でも短時間で元の状態に戻すことができます。そのため、実環境に影響を与えることなく、さまざまな操作や障害発生時の動作を繰り返し検証できます。
次のPowerShellスクリプトは、次の一連の作業を自動実行します(画面1)。ホスト側に用意するテスト用スクリプトの内容を書き換えることで、同じPowerShellコードでさまざまなテストシナリオに対応できます。
ロールバックできるようにVMのチェックポイントを作成する。
VMで統合サービスの「ゲスト サービス インターフェイス」が有効になっていなければ有効化する。
VMを起動して、ゲストOSが起動するまで待機する。
Hyper-Vホスト側に用意しておいたテスト用のPowerShellスクリプトファイル($testScriptPath)を、Hyper-VのCopy-VMFileを使用してVMのゲストOSのC:¥にコピーする。
Invoke-Commandを使用して、テスト用スクリプトをVMのゲストOSで実行し、実行結果を$resultで受け取る。
最新のチェックポイントをVMに適用してロールバックする。
最新のチェックポイントを削除する。
テスト結果($result)を表示する。
(プレーンテキストでダウンロード/表示)
※ この例のようにスクリプト内に平文パスワードを記述することは推奨されません。平文パスワードを排除する方法については、vol.238の「スクリプトから平文パスワードを排除する簡単な方法」を参照してください。

画面1 チェックポイントを作成し、テスト実施後、ロールバックするPowerShellスクリプトの実行例。この例では、VMのコンピューティング能力を使用して、テストスクリプトで円周率を計算(ライプニッツ級数)させている(画面のクリックで拡大)
なお、上記スクリプトのゲストサービスインターフェイスの有効化部分は、統合サービスを名前(Name)で指定しているため、日本語環境のHyper-Vホストでないと正しく機能しません。次のように、統合サービスのIdプロパティを使用することで、日本語環境への依存を排除できます。
|
$vmGuestSvc = $vm | Get-VMIntegrationService | Where{ $_.id -eq "Microsoft:$($vm.id)\6C09BB55-D683-4DA0-8931-C9BF705F6480"} |
特定のVM(またはチェックポイント)の統合サービスのIdは以下のとおりです。
| 統合サービス | Id |
| ハートビート |
Microsoft:VMId(VMSnapshotId)\84EAAE65-2F2E-45F5-9BB5-0E857DC8EB47 |
|
キー値ペア交換 |
Microsoft:VMId(VMSnapshotId)\2A34B1C2-FD73-4043-8A5B-DD2159BC743F |
|
シャットダウン |
Microsoft:VMId(VMSnapshotId)\9F8233AC-BE49-4C79-8EE3-E7E1985B2077 |
| 時刻の同期 |
Microsoft:VMId(VMSnapshotId)\2497F4DE-E9FA-4204-80E4-4B75C46419C0 |
| VSS |
Microsoft:VMId(VMSnapshotId)\5CED1297-4598-4915-A5FC-AD21BB4D02A4 |
| ゲスト サービス インターフェイス |
Microsoft:VMId(VMSnapshotId)\6C09BB55-D683-4DA0-8931-C9BF705F6480 |
リファレンス(Microsoft Learn):
Get-VM(Hyper-V)| Start-VM(Hyper-V)| Checkpoint-VM(Hyper-V)| Restore-VMSnapshot(Hyper-V)| Remove-VMSnapshot(Hyper-V)| Invoke-Command(PowerShell)| Copy-VMFile(Hyper-V)| Export-Clixml(PowerShell)| Import-Clixml(PowerShell)