Pregunta

Uso de Hyper-V, puedo conectar a un host remoto de máquina virtual, vaya a la configuración de una máquina virtual, y añadir un archivo VHD existente como un disco duro nuevo. Si el host VM se está ejecutando Server 2008 R2, y el disco está siendo conectado a un controlador SCSI, que incluso puede hacer esto mientras la máquina virtual está en ejecución (véase ¿Qué hay de nuevo en Hyper-V R2 ).

Al hacer esto manualmente, todo funciona muy bien. El problema es que ahora quiero automatizarlo para que pueda conectar diferentes VHD sobre la marcha durante unas pruebas automatizadas.

Ya tengo el código C # que se conecta al host remoto de VM sobre WMI y arranques / paradas de las máquinas virtuales llamando RequestStateChange , y me gustaría extenderlo a ser capaz de decir 'aquí está el camino a un VHD, adjuntarlo como una unidad SCSI a esta máquina virtual'. Pero mirando el lista de clases WMI de virtualización , no puedo encontrar la manera de hacer esto.

Lo más cerca que he encontrado es el Monte Msvm_ImageManagementService , pero esto aparece para montar un VHD dentro del sistema operativo actual, que no es lo que quiero.

¿Fue útil?

Solución

Es necesario añadir disco sintética (TipoRecurso. Disco , ResourceSubType. DiskSynthetic ) utilizando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = controlador SCSI de WMI camino.

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

A continuación, adjuntar disco duro virtual (TipoRecurso. StorageExtent , ResourceSubType. VHD ) utilizando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Padres = ruta de WMI disco sintético, Conexión = * ruta del archivo .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);

de utilidades comunes para las muestras de virtualización y WMI Explorador .

Otros consejos

También echa un vistazo a http://hypervlib.codeplex.com para un ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top