Beispiel #1
0
        // Gets the Msvm_ComputerSystem instance that matches the requested virtual machine name.
        private ManagementObject GetVirtualMachine(ManagementScope scope, string name)
        {
            string query  = $"SELECT * FROM Msvm_ComputerSystem WHERE ElementName = \"{name}\"";
            var    data   = WmiRoutines.WmiQuery(scope, query);
            var    result = WmiRoutines.GetFirstObjectFromCollection(data);

            if (result == null)
            {
                throw new Exception($"Could not find virtual machine with name \"{name}\"");
            }

            return(result);
        }
Beispiel #2
0
        public bool ExportVirtualSystem(VirtualMachine virtualMachine, SnapshotExport snapshotExport)
        {
            virtualMachine.ExportPercentComplete = 0;

            bool exportSuccess = true;
            var  scope         = WmiRoutines.GetScope(WmiRoutines.NAMESPACE_HYPER_V);

            using (ManagementObject virtualSystemService = WmiRoutines.GetServiceObject(scope, "Msvm_VirtualSystemManagementService"))
                using (ManagementObject srv = GetVirtualMachine(scope, virtualMachine.Name))
                    using (ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("ExportSystemDefinition"))
                    {
                        if (!Directory.Exists(virtualMachine.ExportPath))
                        {
                            Directory.CreateDirectory(virtualMachine.ExportPath);
                        }

                        ManagementPath settingPath = new ManagementPath("Msvm_VirtualSystemExportSettingData");

                        using (ManagementClass exportSettingDataClass = new ManagementClass(scope, settingPath, null))
                            using (ManagementObject exportSettingData = exportSettingDataClass.CreateInstance())
                            {
                                exportSettingData["CopySnapshotConfiguration"]  = snapshotExport;
                                exportSettingData["CopyVmRuntimeInformation"]   = true;
                                exportSettingData["CopyVmStorage"]              = true;
                                exportSettingData["CreateVmExportSubdirectory"] = true;

                                string settingData = exportSettingData.GetText(TextFormat.CimDtd20);

                                inParams["ComputerSystem"]    = srv.Path.Path;
                                inParams["ExportDirectory"]   = virtualMachine.ExportPath;
                                inParams["ExportSettingData"] = settingData;
                            }

                        using (ManagementBaseObject outParams = virtualSystemService.InvokeMethod("ExportSystemDefinition",
                                                                                                  inParams, null))
                        {
                            exportSuccess = ValidateOutput(virtualMachine, outParams, scope, false, true);
                        }
                    }

            virtualMachine.ExportPercentComplete = 100;
            return(exportSuccess);
        }