WIN1@Codename

Codename

Hyper-V をプログラムでどうにかしてみる VBScript その6 (仮想マシンの状態変更)

これまでのスクリプトで作成した仮想ましんを今度は起動してみましょう。
仮想マシンの「起動(2)・停止(3)・リブート(10)・・リセット(11)・一時停止(32768)・保存(32769)」 が同様のスクリプトで可能です。

Option
Explicit

Dim strServerName, strVMName, strNetworkName, strDiskPath, objWMIService, objManagementService
strServerName = "."
strVMName = "TestVM"  
strNetworkName = "LAN - 仮想ネットワーク"
strDiskPath = "E:\Hyper-V\TestVM\TestVM.vhd"
Set objWMIService = GetObject("winmgmts:\\" & strServerName & "\root\virtualization")
Set objManagementService = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)

Call VMStatusChange(strVMName, 2)

Function VMStatusChange(strVMName, intStatus)
    'Start=2 Disabled=3 Reboot=10 Reset=11 Paused=32768 Suspended=32769
    Dim objComputerSystem
    Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)

    Dim objInParam, objOutParams
    Set objInParam = objComputerSystem.Methods_("RequestStateChange").InParameters.SpawnInstance_()
    objInParam.RequestedState = intStatus
    Set objOutParams = objComputerSystem.ExecMethod_("RequestStateChange", 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

コメント

コメントの投稿


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

トラックバック

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

FC2Ad