Windows PowerShellをつかってHyper-VのゲストOSを一時停止するスクリプトを作ってみた。なにごとも簡単なのがいいので、PowerShell Management Library for Hyper-Vを利用してみた。

【使用環境】

OS:Windows Server 2008 R2
PowerShell management Library for Hyper-V

 

【PowerShell Management Library for Hyper-Vのインストール】

インストール方法はネットにいろいろ書いてあるが、以下のようにした。

PsHyperV.ZipをHyper-V R2 用の PowerShell 管理ライブラリ からダウンロードする。適当なフォルダーで展開すると、以下のものができる。

  • HyperVフォルダ
  • install.cmd
  • PS_Console.REG

install.cmdの実行でインストールを行うのだが、こいつが曲者で、以下のようにしないと正常にインストールできなかった。

  • install.cmdをダブルクリックして実行する。(いろいろエラーが出るが気にせずに続行する。)
  • PS_Console.REGをダブルクリックして実行する。(これで、レジストリが正常に追加される)
  • C:\Program Files\modules\HyperVフォルダを開き、中にあるすべてのファイルについて、[右クリック]-[プロパティ]-[ブロック解除]を根気よくおこなう。

【インストール結果の確認】

install.cmdの最後の行で行っている下記のコマンドをDOSプロンプトより実行してみる。

start %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -noExit -Command “Import-Module ‘%ProgramFiles%\modules\hyperV’ ”

エラー(赤字)が表示されずにPowerShellの画面が起動すればOK

Get-VM と入力して、Virtual Machineのステータス一覧が表示されることを確認する。

【スクリプトの作成】

ここまでできれば後は簡単。以下の2つのテキストファイルをc:\に作った。

【仮想マシンを一時停止するスクリプト (vmSave.ps1)】

———————————————————————–
#Hyper-Vを一時停止させる
Import-Module “c:\Program Files\modules\hyperV”
$vms =get-vm -running
foreach($vm in $vms){
#仮想マシンが一時停止するまで処理を待つところがミソ
save-VM $vm -Wait -Force
}
exit
———————————————————————–

(メモ)停止を待たなくていいのなら以下のように一行で書ける。
Get-VM -Running | Save-VM

【vmSave.ps1を起動するバッチ (VmSaveAll.bat)】

———————————————————————–
powershell.exe -noExit c:\vmSave.ps1
———————————————————————–

このバッチを実行すれば仮想マシンは一時停止してくれる。

【その他】

ちなみにほかの使いそうなコマンドは

Stop-VM :仮想マシンのシャットダウン
Start-VM  :仮想マシンの起動

PowerShell Management Library for Hyper-VはWindows Server 2012では標準で入っているらしいので、なんか安心w