WIN1@Codename

Codename

Hyper-V をプログラムでどうにかしてみる VBScript その14 (時刻の同期解除)

仮想マシンに追加された統合サービスにある「時刻の同期」をプログラム的に制御してみます。
今回は「時刻の同期」を無効にします。

注意点としては、このスクリプトは仮想マシンが起動していないとエラーとなります。

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 SetTimeSync(strVMName) 
 
Function SetTimeSync(strVMName)      
    Dim objComputerSystem
    Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
    Dim objTimeSyncComponent
    Set objTimeSyncComponent = objWMIService.ExecQuery("ASSOCIATORS OF {" & objComputerSystem.Path_.Path & "} WHERE ResultClass = Msvm_TimeSyncComponent").ItemIndex(0)
    Dim objTimeSyncComponentSettingData
    Set objTimeSyncComponentSettingData = objWMIService.ExecQuery("ASSOCIATORS OF {" & objTimeSyncComponent.Path_.Path & "} WHERE ResultClass = Msvm_TimeSyncComponentSettingData").ItemIndex(0)
    objTimeSyncComponentSettingData.EnabledState ='Enable=2 Disable=3     
    Dim strTimeSyncComponent
    strTimeSyncComponent = Array(1)
    strTimeSyncComponent(0) = objTimeSyncComponentSettingData.GetText_(1)
    Dim objInParam, objOutParams
    Set objInParam = objManagementService.Methods_("ModifyVirtualSystemResources").InParameters.SpawnInstance_()
    objInParam.ResourceSettingData = strTimeSyncComponent
    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

EnabledState を 「3」 にすることでHyper-Vマネージャーで言うところの「チェックを外す(無効)」にすることができます。
EnabledState を 「2」 にすると「チェックを入れる(有効)」にすることができます。

他の統合サービスの項目も同様の手順で可能だと思います。

コメント

コメントの投稿


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

トラックバック

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

FC2Ad