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

リモートデスクトップサービスを構成せずにRemoteAppを使用する方法

WindowsServer2008R2でRemoteAppを利用するには、通常役割の追加で「リモートデスクトップサービス」を追加し、「RemoteAppマネージャー」にRemoteAppで使用するアプリケーションを登録する必要があります。

この手順を省いてRemoteAppを利用できる設定を紹介します。
本来はWindows7やWindowsVistaでRemoteAppを利用するための設定ですが、WondowsServer2008R2でも有効です。

まずはレジストリで

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\fDisabledAllowList

この値を1に変更します。

次に通常のリモートデスクトップ接続クライアントの接続ファイルRDPをメモ帳で開き、以下の3行を追加します。
今回はWindowsServer2008R2上の電卓をWindows7からRemoteAppで使用する設定です。

remoteapplicationmode:i:1
remoteapplicationname:s:電卓
remoteapplicationprogram:s:C:\Windows\system32\calc.exe

こちらをRDPファイルとして保存して、Windows7から実行してみると、
20114722090224

Aeroを有効にしたWindows7からWindowsServer2008R2のクラッシックテーマの電卓が呼び出されています。

Windows Server 2008 R2 Service Pack 1 その2

入りました。
サーバーの再起動が必要になるもの、とくに問題もなく完了です。

これがうわさのダイナミックメモリーですね。
20114317010225

ホストOSのメモリを効率よく使えるようになるとのふれこみですが、どうでしょう。
いろいろいじってみたいと思います。

Windows Server 2008 R2 Service Pack 1

インストール中・・・
20111317120224

FC2Ad