WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hyper-V をプログラムでどうにかしてみる VBScript その16 (VHDの変更)

久々ですが、覚書がてらすでに接続されているVHDのファイルパスの変更方法です。

   1:  Option Explicit 
   2:   
   3:  Dim strServerName, strVMName, objWMIService, objManagementServicestrServerName = "."
   4:  strVMName = "TestVM" 
   5:  Set objWMIService = GetObject("winmgmts:\\" & strServerName & "\root\virtualization")
   6:  Set objManagementService = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)
   7:   
   8:  Call ChangeVhd(strVMName, "NewVhdPath.vhd")
   9:   
  10:  Sub ChangeVhd(strVMName, strDiskPath)
  11:      Dim objComputerSystem, objVirSettingDatas, objVirSettingData, objVirSettingDatas, objResSettingDatas, objResSettingData, objHardDisk
  12:      Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
  13:     
  14:      Set objVirSettingDatas = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemSettingData WHERE ElementName = '" & strVMName & "'")
  15:         
  16:      For Each objVirSettingData In objVirSettingDatas
  17:          Set objResSettingDatas = objWMIService.ExecQuery("ASSOCIATORS OF {Msvm_VirtualSystemSettingData='" & objVirSettingData.InstanceID & "'} WHERE ResultClass = Msvm_ResourceAllocationSettingData")
  18:                      
  19:          For Each objResSettingData In objResSettingDatas 
  20:              If objResSettingData.ResourceSubType = "Microsoft Virtual Hard Disk" Then
  21:                   Set objHardDisk = objResSettingData                 
  22:                   objHardDisk.Connection(0) = strDiskPath
  23:              End If
  24:          Next
  25:      Next
  26:   
  27:      Dim strResourceSettingData
  28:      strResourceSettingData = Array(1)
  29:      strResourceSettingData(0) = objHardDisk.GetText_(1)   
  30:      Dim objInParam, objOutParams
  31:      Set objInParam = objManagementService.Methods_("ModifyVirtualSystemResources").InParameters.SpawnInstance_()
  32:      objInParam.ResourceSettingData = strResourceSettingData
  33:      objInParam.ComputerSystem = objComputerSystem.Path_.Path
  34:      Set objOutParams = objManagementService.ExecMethod_("ModifyVirtualSystemResources", objInParam) 
  35:   
  36:      Call JobCompleted(objOutParams, objWMIService)    
  37:  End Sub
  38:   
  39:  Function JobCompleted(objOutParams, objWMIService)  
  40:      Dim objJob  
  41:      If (objOutParams.ReturnValue = 0) Then  
  42:          Wscript.Echo "OK"  
  43:      ElseIf (objOutParams.ReturnValue <> 4096) Then  
  44:          Wscript.Echo "NG"  
  45:      Else     
  46:          Set objJob = objWMIService.Get(objOutParams.Job)  
  47:          While (objJob.JobState = 3) Or (objJob.JobState = 4)  
  48:              WScript.Sleep(1000)  
  49:              Set objJob = objWMIService.Get(objOutParams.Job)  
  50:          Wend  
  51:          If (objJob.JobState <> 7) Then  
  52:              Wscript.Echo "NG"  
  53:              Wscript.Echo "ErrorCode:" & objJob.ErrorCode  
  54:              Wscript.Echo "ErrorDescription:" & objJob.ErrorDescription  
  55:          Else  
  56:              Wscript.Echo "OK"  
  57:          End If  
  58:      End If  
  59:  End Function

こんな感じですね。

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/201-1c0278a7
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。