4

使用 Hyper-V 管理器,我可以连接到远程 VM 主机,转到 VM 的设置,并将现有的 .VHD 文件添加为新硬盘。如果 VM 主机运行 Server 2008 R2,并且磁盘连接到 SCSI 控制器,我什至可以在 VM 运行时执行此操作(请参阅Hyper-V R2 中的新增功能)。

手动执行此操作,一切正常。问题是,现在我想自动化它,这样我就可以在一些自动化测试期间即时附加不同的 VHD。

我已经有通过 WMI 连接到远程 VM 主机并通过调用RequestStateChange启动/停止 VM 的 C# 代码,我想扩展它以便能够说“这是 VHD 的路径,将其附加为 SCSI 驱动器到这个虚拟机”。但是查看WMI 虚拟化类的列表,我无法弄清楚如何做到这一点。

我发现的最接近的是Msvm_ImageManagementService的Mount方法,但这似乎是在当前操作系统中安装 VHD,这不是我想要的。

4

2 回答 2

4

需要使用 Msvm_VirtualSystemManagementService.AddVirtualSystemResources 添加合成磁盘(ResourceType. Disk , ResourceSubType. DiskSynthetic)。Parent = SCSI 控制器的 WMI 路径。

ManagementObject synthetic = Utilities.GetResourceAllocationSettingData(scope,
    ResourceType.Disk, ResourceSubType.DiskSynthetic);
synthetic["Parent"] = <ideControllerPath>; //or SCSI controller path (WMI path)
synthetic["Address"] = <diskDriveAddress>; //0 or 1 for IDE
string[] RASDs = new string[1];
RASDs[0] = synthetic.GetText(TextFormat.CimDtd20);

然后使用 Msvm_VirtualSystemManagementService.AddVirtualSystemResources附加虚拟硬盘(ResourceType.StorageExtent ,ResourceSubType.VHD )。Parent = 合成磁盘的 WMI 路径,Connection = *.vhd 文件路径。

ManagementObject hardDisk = Utilities.GetResourceAllocationSettingData(scope,  
    ResourceType.StorageExtent, ResourceSubType.VHD);
hardDisk["Parent"] = <syntheticPath>; //WMI path
string[] connection = { <vhdPath> }; //Path to *.vhd file
hardDisk["Connection"] = connection;
string[] RASDs = new string[1];
RASDs[0] = hardDisk.GetText(TextFormat.CimDtd20);

使用虚拟化示例和WMI Explorer的通用实用程序

于 2010-04-16T16:12:54.250 回答
2

另请查看http://hypervlib.codeplex.com以获取示例。

于 2010-07-01T04:49:48.590 回答