Ceci est dans VB.Net (pas Python), mais j'espère que cela vous poussera dans la bonne direction. Cet exemple applique l'instantané le plus récent, mais pour appliquer un instantané spécifique, il suffit d'obtenir l'occurrence Msvm_VirtualSystemSettingData de l'instantané que vous souhaitez appliquer et d'utiliser cette instance à la place de 'lastSnapshot'.
Imports System.Management
Public Class VirtualSystemSnapshot
Public Shared Function Revert(vmElementName As String)
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