Msvm_ImageManagementService 类的 ConvertVirtualHardDisk 方法
将现有虚拟硬盘转换为其他类型或格式。 此方法创建新的虚拟硬盘,并且不会就地转换源虚拟硬盘。 有关此方法的使用限制,请参阅备注。
语法
uint32 ConvertVirtualHardDisk(
[in] string SourcePath,
[in] string VirtualDiskSettingData,
[out] CIM_ConcreteJob REF Job
);
参数
-
SourcePath [in]
-
类型: 字符串
要转换的源虚拟硬盘文件的完全限定路径。 此操作不会修改此文件。
-
VirtualDiskSettingData [in]
-
类型: 字符串
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) 找不到文件
备注
只有以下类型的虚拟硬盘可以与此方法一起使用:
- 修复了 VHD
- 修复了 VHDX
- 动态 VHD
- 动态 VHDX
- 差异 VHD
- 差异 VHDX
UAC 筛选可能会限制对 Msvm_ImageManagementService 类的访问。 有关详细信息,请参阅 用户帐户控制和 WMI。
示例
以下 C# 示例转换虚拟硬盘。 可以在 虚拟化示例的常见实用工具中找到引用的实用工具, (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();
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows 8 [仅限桌面应用] |
最低受支持的服务器 |
Windows Server 2012 [仅限桌面应用] |
命名空间 |
Root\Virtualization\V2 |
MOF |
|
DLL |
|
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈