2012年6月3日日曜日

Hyper-V用のスクリプト

以前に書いた記事の再掲載です。

Hyper-Vを操作するスクリプトは、PowerShell用の拡張が公開されていますので、そちらを使う方が簡単かもしれません。

詳しくは、私が書いたマイナビの記事「【管理効率化への挑戦】PowerShellで仮想環境も管理!! Hyper-V、SCとの連携」をご覧ください。

また、Windows Serve 2012では標準でPowerShellコマンドレットが利用できるようになります。

Hatena タグ:


Hyper-Vを制御するためのスクリプトは、Virtual Serverと互換性がありません。
Hyper-VがWMIベースなのに対して、Virtual ServerはCOMベースという違いもあります。
Hyper-VのWMIプロバイダは以下のブログが分かりやすいようです。

ただし、「Hyper-V RC1」緊急レビューに掲載されているスクリプトを日本語版Windowsで利用する場合は

if VM.Caption = "Virtual Machine" then

if VM.Caption = "仮想マシン" then

に書き換える必要があります。

caption属性という、言語ごとに違う表記を使うのはおかしいと思いますが、他のサンプルでもそうなっているようです。

以下は、修正済みのスクリプトです。
現在実行中の全仮想サーバーのスナップショットを取ります。

Option Explicit 
Dim strComputer
Dim WMIService
Dim VMManagementService
Dim VMSystemSettingData
Dim VMs
Dim VM
Dim ret

strComputer = "."
Set WMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization")
Set VMs = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem")
Set VMManagementService = WMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)

For Each VM In VMs
if VM.Caption = "仮想マシン" then
if VM.EnabledState = 2 then
WScript.StdOut.Write VM.ElementName & "is running. Creating Snapthot..."
set VMSystemSettingData = (VM.Associators_("Msvm_SettingsDefineState","Msvm_VirtualSystemSettingData")).ItemIndex(0)
ret = VMManagementService.CreateVirtualSystemSnapShot(VM.Path_.Path,VMSystemSettingData)
if ret = 0 or ret = 4096 then
WScript.StdOut.Write "Success."
else
WScript.StdOut.Write "Failed."
end if
end if
WScript.StdOut.Write vbCrLf
end if
Next