public TaskInfoState CreateSnapshot(string name, string description, bool memory, bool quiesce, out string snapshotOut) { snapshotOut = string.Empty; ManagedObjectReference morTask = _vimService.CreateSnapshot_Task(_morThis, name, description, memory, quiesce); MyVMTask myTask = new MyVMTask(_vimService, _pc, morTask); TaskInfo ti = null; TaskInfoState state = myTask.Wait(3000, -1, out ti); if (state == TaskInfoState.success) { ManagedObjectReference morSnapshot = (ManagedObjectReference)(ti.result); snapshotOut = morSnapshot?.Value; } return(state); }
static ManagedObjectReference GetSnapshot(string targetvm, bool takeNew) { if (takeNew) { VirtualMachineRuntimeInfo runtime = GetProperty <VirtualMachineRuntimeInfo>(vm, "runtime"); if (runtime.powerState.ToString() != "poweredOn") { Error(new Exception("VM is not powered on, no point snapshotting")); } Log("[x] Creating snapshot for VM " + targetvm + "..."); ManagedObjectReference task = vim.CreateSnapshot_Task(vm, "System Backup " + DateTime.Now.ToString(), "System Backup" + DateTime.Now.ToString(), true, true); string state = GetProperty <TaskInfo>(task, "info").state.ToString(); while (state != "success") { switch (state) { case "error": Error(new Exception("Error creating snapshot")); break; case "running": Thread.Sleep(10000); break; } state = GetProperty <TaskInfo>(task, "info").state.ToString(); } Log("[x] Snapshot created successfully"); return((ManagedObjectReference)GetProperty <TaskInfo>(task, "info").result); } else { Log("[x] Finding existing snapshots for " + targetvm + "..."); VirtualMachineSnapshotInfo snapshotInfo = null; try { snapshotInfo = GetProperty <VirtualMachineSnapshotInfo>(vm, "snapshot"); } catch (Exception e) { Error(new Exception("No existing snapshots found for the VM " + targetvm + ", recommend you try again with --snapshot set")); } return(snapshotInfo.currentSnapshot); } }