Программное подключение VHD к удаленной виртуальной машине Hyper-V.

StackOverflow https://stackoverflow.com/questions/2210288

Вопрос

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

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

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

Самое близкое, что я нашел, это Устанавливать метод Msvm_ImageManagementService, но, похоже, при этом VHD монтируется внутри текущей ОС, а это не то, что мне нужно.

Это было полезно?

Решение

Необходимо добавить синтетический диск (Тип Ресурса.Диск, РесурсПодтип.ДискСинтетический), используя 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);

Затем прикрепить виртуальный жесткий диск (Тип Ресурса.Экстент хранения, РесурсПодтип.виртуальный жесткий диск), используя 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-проводник.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top