Поделиться через


Метод ConvertVirtualHardDisk класса Msvm_ImageManagementService

Преобразует существующий виртуальный жесткий диск в другой тип или формат. Этот метод создает новый виртуальный жесткий диск и не преобразует исходный виртуальный жесткий диск на месте. Ограничения использования для этого метода см. в разделе Примечания.

Синтаксис

uint32 ConvertVirtualHardDisk(
  [in]  string              SourcePath,
  [in]  string              VirtualDiskSettingData,
  [out] CIM_ConcreteJob REF Job
);

Параметры

SourcePath [in]

Тип: string

Полный путь к исходному файлу виртуального жесткого диска для преобразования. Этот файл не будет изменен в результате этой операции.

VirtualDiskSettingData [in]

Тип: string

Строковое представление класса Msvm_VirtualHardDiskSettingData , указывающее атрибуты нового виртуального жесткого диска. Необходимо задать свойства Path, Type, Format, ParentPath, BlockSize и LogicalSectorSize . Свойство ParentPath может иметь значение Null , если оно не требуется. Задайте для свойств BlockSize и LogicalSectorSize значение 0, чтобы использовать значения по умолчанию.

Чтобы указать формат (VHD или VHDX) нового виртуального жесткого диска, задайте для расширения Path соответствующее значение (".vhd" или .vhdx). Свойство Format должно соответствовать расширению имени файла в path.

Свойство LogicalSectorSize будет игнорироваться.

Задание [out]

Тип: CIM_ConcreteJob

Если операция выполняется асинхронно, этот метод возвращает значение 4096, а этот параметр будет содержать ссылку на объект, производный от CIM_ConcreteJob.

Возвращаемое значение

Тип: uint32

Этот метод может возвращать одно из следующих значений.

Выполнено без ошибок (0)

Проверенные параметры метода — задание запущено (4096)

Сбой (32768)

Доступ запрещен (32769)

Не поддерживается (32770)

Состояние неизвестно (32771)

Время ожидания (32772)

Недопустимый параметр (32773)

Система используется (32774)

Недопустимое состояние для этой операции (32775)

Неправильный тип данных (32776)

Система недоступна (32777)

Нехватка памяти (32778)

Файл не найден (32779)

Комментарии

С этим методом можно использовать только следующие типы виртуальных жестких дисков:

  • Исправлен виртуальный жесткий диск
  • Исправлена версия VHDX
  • Динамический виртуальный жесткий диск
  • Динамический VHDX
  • Разностные виртуальные жесткие диски
  • Разностные VHDX

Доступ к классу Msvm_ImageManagementService может быть ограничен фильтрацией UAC. Дополнительные сведения см. в разделе Контроль учетных записей и инструментарий WMI.

Примеры

В следующем примере C# выполняется преобразование виртуального жесткого диска. Ссылки на служебные программы можно найти в разделе Общие служебные программы для примеров виртуализации (версия 2).

public enum VirtualHardDiskType
{
    Fixed = 2,
    Dynamic = 3,
    Differencing = 4
}

public enum VirtualHardDiskFormat
{
    Unknown = 0,
    Vhd = 2,
    Vhdx = 3
}

public static void ConvertVirtualHardDisk(string sourcePath, string destinationPath, VirtualHardDiskType diskType, VirtualHardDiskFormat diskFormat)
{
    ManagementScope scope = new ManagementScope(@"root\virtualization\V2", null);
    ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService");

    ManagementPath path = new ManagementPath()
    {
        Server = null,
        NamespacePath = imageService.Path.Path,
        ClassName = "Msvm_VirtualHardDiskSettingData"
    };

    ManagementClass settingsClass = new ManagementClass(path);
    ManagementObject settingsInstance = settingsClass.CreateInstance();
    settingsInstance["Path"] = destinationPath;
    settingsInstance["Type"] = diskType;
    settingsInstance["Format"] = diskFormat;
    settingsInstance["ParentPath"] = null;
    settingsInstance["MaxInternalSize"] = 0;
    settingsInstance["BlockSize"] = 0;
    settingsInstance["LogicalSectorSize"] = 0;
    settingsInstance["PhysicalSectorSize"] = 0;

    ManagementBaseObject inParams = imageService.GetMethodParameters("ConvertVirtualHardDisk");

    inParams["SourcePath"] = sourcePath;
    inParams["VirtualDiskSettingData"] = settingsInstance.GetText(TextFormat.WmiDtd20);

    ManagementBaseObject outParams = imageService.InvokeMethod("ConvertVirtualHardDisk", inParams, null);
    UInt32 result = (UInt32)outParams["ReturnValue"];
    if (ReturnCode.Completed == result)
    {
        Console.WriteLine("{0} was converted successfully.", inParams["SourcePath"]);
    }
    else if (ReturnCode.Started == result)
    {
        if (Utility.JobCompleted(outParams, scope))
        {
            Console.WriteLine("{0} was converted successfully.", inParams["SourcePath"]);
        }
        else
        {
            Console.WriteLine("Unable to convert {0}", inParams["SourcePath"]);
        }
    }
    else
    {
        // The method failed.
        Console.WriteLine("ConvertVirtualHardDisk failed with error code {0}.", result);
    }

    outParams.Dispose();
    inParams.Dispose();
    imageService.Dispose();
}

Требования

Требование Значение
Минимальная версия клиента
Windows 8 [только классические приложения]
Минимальная версия сервера
Windows Server 2012 [только классические приложения]
Пространство имен
Root\Virtualization\V2
MOF
WindowsVirtualization.V2.mof
DLL
Vmms.exe

См. также раздел

ConvertVirtualHardDisk (V1)

CIM_ConcreteJob

Msvm_ImageManagementService