WIN1@Codename

Codename

Hyper-V をプログラムでどうにかしてみる VBScript その7 (仮想マシンのシャットダウン)

前回のステータス変更で抜けていたのが、仮想マシンの「シャットダウン」です。
こちらは、別のスクリプトで実施することになります。
事前に統合サービスのインストールが仮想マシン側に必要なようですので、ご注意ください。

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 VMShutDown(strVMName)

Function VMShutDown(strVMName)
    Dim objComputerSystem
    Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)

    Dim objShutdownComponent
    Set objShutdownComponent = objWMIService.ExecQuery("SELECT * FROM Msvm_ShutdownComponent WHERE SystemName='" & objComputerSystem.Name & "'").ItemIndex(0)

    Dim objInParam, objOutParams
    Set objInParam = objShutdownComponent.Methods_("InitiateShutdown").InParameters.SpawnInstance_()
    objInParam.Force = True
    objInParam.Reason = ""
    Set objOutParams = objShutdownComponent.ExecMethod_("InitiateShutdown", 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/163-6f8e4802
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad