Программно подключить виртуальный жесткий диск к удаленной виртуальной машине Hyper-V - PullRequest
4 голосов
/ 05 февраля 2010

Используя диспетчер Hyper-V, я могу подключиться к удаленному хосту виртуальной машины, перейти к настройкам виртуальной машины и добавить существующий файл .VHD в качестве нового жесткого диска. Если на хосте виртуальной машины работает Server 2008 R2, а диск подключен к контроллеру SCSI, я могу даже сделать это во время работы виртуальной машины (см. Что нового в Hyper-V R2 ).

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

У меня уже есть код C #, который подключается к удаленному узлу виртуальной машины через WMI и запускает / останавливает виртуальные машины, вызывая RequestStateChange , и я хотел бы расширить его, чтобы иметь возможность сказать «вот путь к VHD, подключите его как диск SCSI к этой виртуальной машине ". Но, глядя на список классов виртуализации WMI , я не могу понять, как это сделать.

Наиболее близким из найденных мной является Mount метод Msvm_ImageManagementService , но, похоже, он монтирует виртуальный жесткий диск внутри текущей ОС, а это не то, чего я хочу. *

Ответы [ 2 ]

4 голосов
/ 16 апреля 2010

Необходимо добавить синтетический диск (ResourceType. Диск , ResourceSubType. DiskSynthetic ) с использованием Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Родитель = путь WMI контроллера SCSI.

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

Затем подключить виртуальный жесткий диск (ResourceType. StorageExtent , ResourceSubType. VHD ) с использованием Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Родитель = путь WMI синтетического диска, соединение = * .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 .

2 голосов
/ 01 июля 2010

Также посмотрите на http://hypervlib.codeplex.com для примера.

...