PowerShellでHyper-V上の仮想マシンのスナップショット取得

by kusakari 29. 10月 2009 21:00

Hyper-V上の仮想マシンに対して、PowerShellからスナップショットをとってみたいと思います。


■環境

  • PowerShell v2
  • Hyper-V 2.0



仮想マシンのスナップショットをとるには、WMIのMsvm_VirtualSystemManagementServiceクラスの、CreateVirtualSystemSnapshotを使います。


■Msvm_VirtualSystemManagementServiceを作ります。

$vm_manager = gwmi -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService




■CreateVirtualSystemSnapshotのパラメーターには、Msvm_Computersystemの__Pathプロパティをあたえます。

$vm_manager.CreateVirtualSystemSnapshot(<Msvm_Computersystem.__Path>)




■サンプル1
VM-1の仮想マシンのスナップショットを取得します。

$ns = "root\virtualization" 
$target = "VM-1" 

$vm = gwmi -Namespace $ns Msvm_Computersystem -Filter "ElementName = '$target'" 
$manager = gwmi -Namespace $ns Msvm_VirtualSystemManagementService 
$manager.CreateVirtualSystemSnapshot($vm.__Path)



なお、__Pathプロパティは下図のような値が含まれています。
2009102920_244




■サンプル2
Hyper-V上の仮想マシン全てに対して、スナップショットを取得します。

$ns = "root\virtualization"
$filter = "Description = 'Microsoft Virtual Machine'"

gwmi -Namespace $ns Msvm_Computersystem -Filter $filter | foreach {
     $path = $_.__Path;
     gwmi -Namespace $ns Msvm_VirtualSystemManagementService | foreach {
         $_.CreateVirtualSystemSnapshot($path) | Out-Null

         Start-Sleep -s 1
         }
     }




■参考
CreateVirtualSystemSnapshotに関しては、下記のMSDNをご覧ください。
http://msdn.microsoft.com/en-us/library/cc136785%28VS.85%29.aspx

 

 

IMG_091029_203132

スニャっプショットを取得すると、vhdから差分の.avhdニャイルが作成されニャす。
ニャた、.expの構成ニャイルがsnapshotニャルダに作成されニャす。

PowerShellでHyper-V上の仮想マシンをインポート

by kusakari 28. 10月 2009 20:00

Hyper-V上の仮想マシンに対して、インポートを行うコマンドをPowerShellから送信してみたいと思います。

 

■環境

  • PowerShell v2
  • Hyper-V 2.0


エクスポートされたファイルから仮想マシンをインポートするには、WMIのMsvm_VirtualSystemManagementServiceクラスのImportVirtualSystemを使います。

■Msvm_VirtualSystemManagementServiceを作ります。

$vm_manager = gwmi -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService




■ExportVirtualSystemのパラメーターに、エクスポートするComputerSystemとエクスポート先をあたえます。

$vm_manager.ExportVirtualSystem("<インポート先フォルダパス>", $TRUE)

※「インポート先フォルダパス」については、エクスポート時に作成された「config.xml」が保存されているフォルダのパスを指定します。
※第2パラメーターのbool値は、インポートする仮想マシンに対して、新しく SID を作成する場合は「TRUE」を指定します。



■サンプル
「c:\temp\VM-1」フォルダにエクスポートされている仮想マシンを、インポートします。

$ns = "root\virtualization"
$vm_import_path = "c:\temp\VM-1"

$vm_manager = gwmi -Namespace $ns Msvm_VirtualSystemManagementService
$vm_manager.ImportVirtualSystem($vm_import_path, $TRUE) | Out-Null 




■参考
ImportVirtualSystemに関しては、下記のMSDNをご覧ください。
http://msdn.microsoft.com/en-us/library/cc136798%28VS.85%29.aspx

PowerShellでHyper-V上の仮想マシンをエクスポート

by kusakari 26. 10月 2009 23:24

Hyper-V上の仮想マシンに対して、エクスポートを行うコマンドをPowerShellから送信してみたいと思います。

仮想マシンをエクスポートするには、WMIのMsvm_VirtualSystemManagementServiceクラスのExportVirtualSystemを使います。


■環境

  • PowerShell v2
  • Hyper-V 2.0



■Msvm_VirtualSystemManagementServiceを作ります。

$vm_manager = gwmi -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService




■ExportVirtualSystemのパラメーターに、エクスポートするComputerSystemとエクスポート先をあたえます。

$vm_manager.ExportVirtualSystem("<ComputerSystem>", $TRUE, "<エクスポート先のパス>") 




■サンプル1
c:\tempフォルダ内に、VM-1の仮想マシンをエクスポートします。

$ns = "root\virtualization"  
$vm_target = "VM-1"
$vm_export_path = "c:\temp\"

$vm_manager = gwmi -Namespace $ns Msvm_VirtualSystemManagementService
$vm = gwmi -Namespace $ns Msvm_ComputerSystem -Filter "ElementName = '$vm_target'"

$vm_manager.ExportVirtualSystem($vm, $TRUE, $vm_export_path)




■結果

C:\Users\xxxxxx>tree c:\temp /F 
フォルダー パスの一覧 
ボリューム シリアル番号は 2ACB-67C9 です 
C:\TEMP 
└─VM-1
     │  config.xml
     │
     ├─Snapshots
     │      7F746104-31D3-43AB-B27D-7B5CBF5C9B5C.exp
     │      C1BC4D4A-504C-4638-BCE5-2714BC7CED14.exp
     │
     ├─Virtual Hard Disks
     │      VM-1.vhd
     │      VM-1_07684CED-1AC1-4648-8BD7-EAA7350A19E6.avhd
     │      VM-1_F3286AE5-1F35-4CB7-B46F-B1FF3BBBA89E.avhd
     │
     └─Virtual Machines
             49503C87-7399-44EA-A43D-5D73A81EA4FE.exp


なお、2個目のパラメーターのbool値を$FALSEに変更した場合の結果は、下記のようになり、vhdファイルのエクスポートは行いません。

C:\Users\xxxxxx>tree c:\temp /F 
フォルダー パスの一覧 
ボリューム シリアル番号は 2ACB-67C9 です 
C:\TEMP 
└─VM-1
     │  config.xml
     │
     ├─Snapshots
     │      7F746104-31D3-43AB-B27D-7B5CBF5C9B5C.exp
     │      C1BC4D4A-504C-4638-BCE5-2714BC7CED14.exp
     │
     ├─Virtual Hard Disks
     │      VM-1_07684CED-1AC1-4648-8BD7-EAA7350A19E6.avhd
     │      VM-1_F3286AE5-1F35-4CB7-B46F-B1FF3BBBA89E.avhd
     │
     └─Virtual Machines
             49503C87-7399-44EA-A43D-5D73A81EA4FE.exp




■サンプル2
Hyper-V上の仮想マシン全てに対して、「C:\temp」フォルダにVHDファイルなしでエクスポートします。

$ns = "root\virtualization"
$vm_export_path = "c:\temp\"

$vmCollection = gwmi -Namespace $ns Msvm_Computersystem -Filter "Description = 'Microsoft Virtual Machine'"
 $vmCollection | foreach {
     $vm_manager = gwmi -Namespace $ns Msvm_VirtualSystemManagementService
     $Result = $vm_manager.ExportVirtualSystem($_, $FALSE, $vm_export_path)
     Start-Sleep -Milliseconds 1000
     }




■参考
ExportVirtualSystemに関しては、下記のMSDNをご覧ください。
http://msdn.microsoft.com/en-us/library/cc136793%28VS.85%29.aspx

 

PowerShellでHyper-V上の仮想マシンを起動させる

by kusakari 21. 10月 2009 18:15

前回、Hyper-V上の仮想マシンに対して、シャットダウンを行うコマンドを送信してみました。今回は、停止している仮想マシンを、PowerShellから起動するようにしてみたいと思います。


■環境

  • PowerShell v2(RTM)
  • Hyper-V 2.0(RTM)



■内容
状態を変更する RequestStateChange( RequestedState ) を利用します。
※起動させるには RequestedState パラメーターの値を 2 にします。

$vm_name = "<仮想インスタンス名>"

$vm = gwmi -Namespace root\virtualization -Class Msvm_ComputerSystem -Filter "ElementName = '$vm_name'"
$vm_status = $vm.RequestStateChange(2) 


RequestStateChange( RequestedState ) に関する内容は、下記のMSDNをご覧ください。
http://msdn.microsoft.com/en-us/library/cc723874%28VS.85%29.aspx



■サンプル
下記のスクリプトを実行すると、Hyper-V上の仮想インスタンス(vm-1 と vm-2 と vm-3)を起動させます。

$ns = "root\virtualization"
$vms_name = "vm-1","vm-2","vm-3"

$vmCollection = gwmi -Namespace $ns Msvm_Computersystem -Filter "Description = 'Microsoft Virtual Machine'"
$vmCollection | foreach {
     $vm = $_;
     $vms_name | foreach {
          if($vm.ElementName -eq $_) {
              $vm.RequestStateChange(2) | Out-Null
              Start-Sleep -Milliseconds 1000
              }
          }
     }



■補足
RequestedState パラメーターの値を 3 にしたりして、仮想マシンを停止させた場合は、強制終了となりますのでご注意ください。

PowerShellでHyper-V上の仮想マシンをシャットダウン

by kusakari 20. 10月 2009 21:21

Hyper-V上の仮想マシンに対して、シャットダウンを行うコマンドを送信してみます。

■環境

  • PowerShell v2(RTM)
  • Hyper-V 2.0(RTM)


■内容
「Associators Of」クエリを利用して、仮想インスタンスと「Msvm_ShutdownComponent」クラスを関連付けて、InitiateShutdownを利用して仮想マシンをシャットダウンさせてみます。

参考:スクリプトセンター
http://gallery.technet.microsoft.com/ScriptCenter/ja-jp/f2f81afb-202c-49fa-a3c8-ab7153cafe05

$vm_name = "<仮想インスタンス名>"

$vm = gwmi -Namespace root\virtualization -Class Msvm_ComputerSystem -Filter "ElementName = '$vm_name'"
$shutdown = gwmi -namespace root\virtualization -Query "Associators of {$vm} Where ResultClass = Msvm_ShutdownComponent"

return $shutdown.InitiateShutdown($true, "<シャットダウンの理由>")


InitiateShutdownの内容に関しては、下記のMSDNをご覧ください。
http://msdn.microsoft.com/en-us/library/cc703625%28VS.85%29.aspx



■サンプル
下記のスクリプトを実行すると、Hyper-V上で稼働中の全仮想インスタンスをシャットダウンさせます。

 

$ns = "root\virtualization"

$vmCollection = gwmi -Namespace $ns Msvm_Computersystem -Filter "Description = 'Microsoft Virtual Machine'"
$vmCollection | foreach {
      if($_.EnabledState -ne "3") {
          $shutdown = gwmi -Namespace $ns -Query "Associators of {$_} Where ResultClass = Msvm_ShutdownComponent"
          $shutdown.InitiateShutdown($true, "定期メンテナンス") | Out-Null
          Start-Sleep -Milliseconds 1000
          }
      } 

Calendar

<<  7月 2010  >>
月曜火曜水曜木曜金曜土曜日曜
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar

RecentComments

Comment RSS