バッチファイル(コマンド/スクリプト)でHyper-V仮想サーバーを起動、停止、一時停止させる

仮想マシンのステータスを変更するバッチファイル

"Windows Server 2008 R2 NO.01"という名前の仮想マシンの起動をする場合は以下のファイルを作成して実行します。

start_01.vbs

Option Explicit 
Dim WMIService 
Dim VMList 
Dim VMName 

VMName = "Windows Server 2008 R2 NO.01" 
Set WMIService = GetObject("winmgmts:\\.\root\virtualization") 
Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName='"
  & VMName & "'") 

'起動
VMList.ItemIndex(0).RequestStateChange(2) 

"Windows Server 2008 R2 NO.01"という名前の仮想マシンの一時停止をする場合は以下のファイルを作成して実行します。

stop_01.vbs

Option Explicit 
Dim WMIService 
Dim VMList 
Dim VMName 

VMName = "Windows Server 2008 R2 NO.01" 
Set WMIService = GetObject("winmgmts:\\.\root\virtualization") 
Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName='"
  & VMName & "'") 

'一時停止
VMList.ItemIndex(0).RequestStateChange(32768) 

"Windows Server 2008 R2 NO.01"という名前の仮想マシンの停止をする場合は以下のファイルを作成して実行します。

kill_01.vbs

Option Explicit 
Dim WMIService 
Dim VMList 
Dim VMName 

VMName = "Windows Server 2008 R2 NO.01" 
Set WMIService = GetObject("winmgmts:\\.\root\virtualization") 
Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName='"
  & VMName & "'") 

'停止
VMList.ItemIndex(0).RequestStateChange(3) 

仮想マシンの状態

仮想マシンの状態は以下の数値で表されます
0不明
2実行中(Enabled)
3停止(Disabled)
32768一時停止(Paused)
32769保存完了(Suspended)
32770復元(Starting)
32771スナップショット取得中(Snapshotting)
32773保存中(Saving)
32774停止中(Stopping)
32776一時停止中(Pausing)
32777再開中(Resuming)

注意: Windows Server 2012 R2で動作しない

この記事で紹介したVB Script(Windows Script Host)はWindows Server 2012 R2では"SWbemObjectSet"が「無効なクラスです」のエラーメッセージが表示され、動作しません。
Windows Server 2012 R2で仮想マシンの状態を変更する場合はWindows PowerShellを用いると簡単に実現できます。詳しくはこちらの記事を参照してください。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2015-07-20
作成日: 2011-04-05
iPentec all rights reserverd.