以前に書いた記事の再掲載です。
Hyper-Vを操作するスクリプトは、PowerShell用の拡張が公開されていますので、そちらを使う方が簡単かもしれません。
詳しくは、私が書いたマイナビの記事「【管理効率化への挑戦】PowerShellで仮想環境も管理!! Hyper-V、SCとの連携」をご覧ください。
また、Windows Serve 2012では標準でPowerShellコマンドレットが利用できるようになります。
Hatena タグ: Hyper-V
Hyper-Vを制御するためのスクリプトは、Virtual Serverと互換性がありません。
Hyper-VがWMIベースなのに対して、Virtual ServerはCOMベースという違いもあります。
Hyper-VのWMIプロバイダは以下のブログが分かりやすいようです。
- Hyper-V Programming Model (ブログ)
- Hyper-V WMI Provider (公式情報)
- Virtualization Team Blog (仮想化開発チームのブログ)
- 「Hyper-V RC1」緊急レビュー (翻訳)
ただし、「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
0 件のコメント:
コメントを投稿