Compartir a través de


Método ConvertVirtualHardDisk de la clase Msvm_ImageManagementService

Convierte un disco duro virtual existente en otro tipo o formato. Este método crea un nuevo disco duro virtual y no convierte el disco duro virtual de origen en su lugar. Consulte Comentarios para conocer las restricciones de uso de este método.

Sintaxis

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

Parámetros

SourcePath [in]

Tipo: cadena

Ruta de acceso completa del archivo de disco duro virtual de origen que se va a convertir. Este archivo no se modificará como resultado de esta operación.

VirtualDiskSettingData [in]

Tipo: cadena

Representación de cadena de la clase Msvm_VirtualHardDiskSettingData que especifica los atributos del nuevo disco duro virtual. Las propiedades Path, Type, Format, ParentPath, BlockSize y LogicalSectorSize deben establecerse. La propiedad ParentPath puede ser Null si no es necesaria. Establezca las propiedades BlockSize y LogicalSectorSize en 0 para usar los valores predeterminados.

Para especificar el formato (VHD o VHDX) del nuevo disco duro virtual, establezca la extensión de la ruta de acceso al valor adecuado (".vhd" o ".vhdx"). La propiedad Format debe coincidir con la extensión de nombre de archivo en la ruta de acceso.

Se omitirá la propiedad LogicalSectorSize .

Trabajo [salida]

Tipo: CIM_ConcreteJob

Si la operación se realiza de forma asincrónica, este método devolverá 4096 y este parámetro contendrá una referencia a un objeto derivado de CIM_ConcreteJob.

Valor devuelto

Tipo: uint32

Este método puede devolver uno de los siguientes valores.

Completado sin error (0)

Parámetros de método comprobados: trabajo iniciado (4096)

Error (32768)

Acceso denegado (32769)

No compatible (32770)

El estado es desconocido (32771)

Tiempo de espera (32772)

Parámetro no válido (32773)

El sistema está en uso (32774)

Estado no válido para esta operación (32775)

Tipo de datos incorrecto (32776)

El sistema no está disponible (32777)

Memoria insuficiente (32778)

Archivo no encontrado (32779)

Comentarios

Solo se pueden usar los siguientes tipos de discos duros virtuales con este método:

  • Disco duro virtual corregido
  • VHDX corregido
  • VHD dinámico
  • VHDX dinámico
  • Diferenciación del disco duro virtual
  • Diferenciación de VHDX

El filtrado UAC puede restringir el acceso a la clase Msvm_ImageManagementService . Para obtener más información, consulte Control de cuentas de usuario y WMI.

Ejemplos

En el ejemplo de C# siguiente se convierte un disco duro virtual. Las utilidades a las que se hace referencia se pueden encontrar en Utilidades comunes para los ejemplos de virtualización (V2).

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();
}

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2012 [solo aplicaciones de escritorio]
Espacio de nombres
Root\Virtualization\V2
MOF
WindowsVirtualization.V2.mof
Archivo DLL
Vmms.exe

Consulte también

ConvertVirtualHardDisk (V1)

CIM_ConcreteJob

Msvm_ImageManagementService