Pergunta

Usando o Hyper-V Manager, I pode se conectar a um host remoto VM, vá para as configurações de uma VM, e adicione um arquivo .vhd existente como um novo disco rígido. Se o host VM está sendo executado Server 2008 R2, eo disco está sendo anexado a um controlador SCSI, eu mesmo posso fazer isso enquanto a VM está em execução (veja O que há de novo no Hyper-V R2 ).

Fazer isso manualmente, tudo funciona muito bem. O problema é que agora eu quero automatizá-lo para que eu possa anexar diferentes VHDs on-the-fly durante alguns testes automatizados.

Eu já tenho o código C # que se conecta ao host VM remoto sobre WMI e inicia / pára VMs chamando RequestStateChange , e eu gostaria de estendê-lo para ser capaz de dizer 'aqui está o caminho para um VHD, anexá-lo como uma unidade SCSI a esta VM'. Mas olhando para o href="http://msdn.microsoft.com/en-us/library/cc136992(VS.85).aspx" rel="nofollow lista de classes de virtualização WMI , eu não consigo descobrir como fazer isso.

O mais próximo que eu encontrei já é o Monte método de Msvm_ImageManagementService , mas esta parece montar um VHD dentro do sistema operacional atual, que não é o que eu quero.

Foi útil?

Solução

É necessário adicionar disco sintético (ResourceType. Disk , ResourceSubType. DiskSynthetic ) usando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = caminho WMI do controlador 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);

Depois de anexar disco rígido virtual (ResourceType. StorageExtent , ResourceSubType. VHD ) usando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = caminho WMI do disco sintético, Conexão = * .vhd caminho de arquivo.

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

Use utilitários comuns para os Virtualização amostras WMI Explorador .

Outras dicas

Também dê uma olhada http://hypervlib.codeplex.com para um exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top