WIN1@Codename

Codename

Hyper-V をプログラムでどうにかしてみる VBScript その13 (ダイナミックメモリの設定)

Hyper-V2.0のSP1で追加されたDynamicMemoryの設定方法です。

DynamicMemoryEnabled : ダイナミックメモリを有効にします この値がFalseのときはVirtualQuantityの値で静的RAMの設定となります
VirtualQuantity : スタートアップRAM
Reservation : 最小RAM (この値はHypee-Vマネージャーでは設定できず、WMI経由でしか設定できません)
Limit : 最大RAM
Weight : メモリの優先度
TargetMemoryBuffer : メモリバッファー

Option Explicit

Dim strServerName, strVMName, objWMIService, objManagementService
strServerName = "."
strVMName = "TestVM" 
Set objWMIService = GetObject("winmgmts:\\" & strServerName & "\root\virtualization")
Set objManagementService = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)

Call SetDynamicMemory(strVMName, 1024, 512, 2048, 5000, 20) 
 
Function SetDynamicMemory(strVMName, intVirtualQuantity, intReservation, intLimit, intWeight, intTargetMemoryBuffer)      
    Dim objComputerSystem
    Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
    Dim objVirtualSystemSettingData
    Set objVirtualSystemSettingData = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemSettingData WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
    Dim objMemorySettingData 
    Set objMemorySettingData = objWMIService.ExecQuery("ASSOCIATORS OF {" & objVirtualSystemSettingData.Path_.Path & "} WHERE ResultClass = Msvm_MemorySettingData").ItemIndex(0)
    objMemorySettingData.DynamicMemoryEnabled = True 
    objMemorySettingData.VirtualQuantity = intVirtualQuantity
    objMemorySettingData.Reservation = intReservation
    objMemorySettingData.Limit = intLimit 
    objMemorySettingData.Weight = intWeight
    objMemorySettingData.TargetMemoryBuffer = intTargetMemoryBuffer 
    Dim strMemorySettingData
    strMemorySettingData = Array(1)
    strMemorySettingData(0) = objMemorySettingData.GetText_(1)
 
    Dim objInParam, objOutParams
    Set objInParam = objManagementService.Methods_("ModifyVirtualSystemResources").InParameters.SpawnInstance_()
    objInParam.ResourceSettingData = strMemorySettingData
    objInParam.ComputerSystem = objComputerSystem.Path_.Path
    Set objOutParams = objManagementService.ExecMethod_("ModifyVirtualSystemResources", objInParam)
 
    Call JobCompleted(objOutParams, objWMIService)
End Function 
 
Function JobCompleted(objOutParams, objWMIService) 
    Dim objJob 
    If (objOutParams.ReturnValue = 0) Then 
        Wscript.Echo "OK" 
    ElseIf (objOutParams.ReturnValue <> 4096) Then 
        Wscript.Echo "NG" 
    Else    
        Set objJob = objWMIService.Get(objOutParams.Job) 
        While (objJob.JobState = 3) Or (objJob.JobState = 4) 
WScript.Sleep(1000) 
Set objJob = objWMIService.Get(objOutParams.Job) 
        Wend 
        If (objJob.JobState <> 7) Then 
Wscript.Echo "NG" 
Wscript.Echo "ErrorCode:" & objJob.ErrorCode 
Wscript.Echo "ErrorDescription:" & objJob.ErrorDescription 
        Else 
Wscript.Echo "OK" 
        End If 
    End If 
End Function

上記設定でこのようになります。
20115923030226

コメント

コメントの投稿


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

トラックバック

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

FC2Ad