簡體   English   中英

以編程方式將VHD附加到遠程Hyper-V VM

[英]Programmatically attaching a VHD to a remote Hyper-V VM

使用Hyper-V Manager,我可以連接到遠程VM主機,轉到VM的設置,並將現有的.VHD文件添加為新硬盤。 如果VM主機正在運行Server 2008 R2,並且磁盤正在連接到SCSI控制器,我甚至可以在VM運行時執行此操作(請參閱Hyper-V R2中的新增功能 )。

手動完成這一切,一切都很好。 麻煩的是,現在我想自動化它,這樣我就可以在一些自動化測試中即時連接不同的VHD。

我已經有了通過WMI連接到遠程VM主機的C#代碼,並通過調用RequestStateChange來啟動/停止VM,我想擴展它以便能夠說“這里是VHD的路徑,將它作為SCSI驅動器連接到這個VM“。 但是看一下WMI虛擬化類列表 ,我無法弄清楚如何做到這一點。

我找到的最接近的是Msvm_ImageManagementServiceMount方法,但這似乎是在當前操作系統中掛載VHD,這不是我想要的。

有必要添加合成的磁盤 (的ResourceType。 磁盤 ,ResourceSubType。DiskSynthetic)使用Msvm_VirtualSystemManagementService.AddVirtualSystemResources。 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);

Common Utilities用於Virtualization SamplesWMI Explorer

另請參閱http://hypervlib.codeplex.com以獲取示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM