MJ999 Ответов: 1

C# ApplySnapshot Пример Hyper-V V2


Я пытаюсь применить снимок к виртуальной машине hyper V (v2)с помощью C# и метода ApplySnapshot.

https://msdn.microsoft.com/en-us/library/hh850022%28v=vs.85%29.aspx

Но я, кажется, борюсь, так как нет образца для этого метода. Я был бы признателен, если бы кто-нибудь мог помочь в предоставлении образца или образца проекта.

Большое спасибо

1 Ответов

Рейтинг:
2

EChristensen

Привет MJ999,

Этот пример находится в VB.NET, но его можно легко перевести на C#. В этом примере я применяю самый последний снимок виртуальной машины. Чтобы применить конкретный снимок, замените "lastSnapshot" экземпляром Msvm_VirtualSystemSettingData снимка, который вы хотите применить.

Надеюсь, это поможет вам двигаться дальше, но, пожалуйста, дайте мне знать, если у вас все еще есть какие-либо проблемы.

Imports System.Management

Public Class VirtualSystemSnapshot
    Public Shared Function Apply(vm As ManagementObject, snapName As String)
        Dim Options As New ConnectionOptions
        Options.Username = strUserName
        Options.Password = strPassword

        ' Now we can apply the snapshot
        Dim scope As New ManagementScope("\\" & ServerName & "\Root\Virtualization\V2", Options)
        Using virtualMachine As ManagementObject = WmiUtilities.GetVirtualMachine(vmElementName, scope)
            Using virtualSystemSettingData As ManagementObject = WmiUtilities.GetVirtualSystemSettingData(scope, virtualMachine)
                Using virtualSystemSnapshotService As ManagementObject = WmiUtilities.GetVirtualSystemSnapshotService(scope)
                    Using lastSnapshot As ManagementObject = WmiUtilities.GetFirstObjectFromCollection(
                            virtualSystemSettingData.GetRelated("Msvm_VirtualSystemSettingData", "Msvm_ParentChildSettingData", Nothing, Nothing, Nothing, Nothing, False, Nothing))
                        Using inParams As ManagementBaseObject = virtualSystemSnapshotService.GetMethodParameters("ApplySnapshot")
                            inParams("Snapshot") = lastSnapshot

                            ' In order to apply a snapshot, the virtual machine must first be saved
                            RequestStateChange.Main(vm, RequestedState.Save)

                            Using outParams As ManagementBaseObject = virtualSystemSnapshotService.InvokeMethod("ApplySnapshot", inParams, Nothing)
                                WmiUtilities.ValidateOutput(outParams, scope)

                                ' Now that the snapshot has been applied, start the VM back up
                                RequestStateChange.Main(vm, RequestedState.Start)
                            End Using
                        End Using
                    End Using
                End Using
            End Using
        End Using
    End Function
End Class