Domanda

Utilizzando Gestione Hyper-V, è possibile connettersi a un host di macchine virtuali a distanza, andare alle impostazioni di una macchina virtuale, e aggiungere un file VHD esistente come un nuovo disco rigido. Se l'host VM è in esecuzione Server 2008 R2, e il disco viene collegato a un controller SCSI, anche io posso fare questo mentre la VM è in funzione (vedi Cosa c'è di nuovo in Hyper-V R2 ).

In questo manuale, tutto funziona alla grande. Il problema è che ora voglio automatizzare in modo da poter collegare diversi VHD on-the-fly durante alcuni test automatizzati.

Ho già codice C # che si collega con l'host VM remoto tramite WMI e avvia / ferma VM chiamando RequestStateChange , e vorrei estenderlo per essere in grado di dire 'ecco il percorso di un VHD, fissarla come un drive SCSI a questo VM'. Ma guardando il elenco delle classi di virtualizzazione WMI , io non riesco a capire come fare questo.

Il più vicino che ho trovato è il Monte metodo Msvm_ImageManagementService , ma questo sembra montare un disco rigido virtuale all'interno del sistema operativo attuale, che non è quello che voglio.

È stato utile?

Soluzione

E 'necessario aggiungere disco sintetico (ResourceType. disco , ResourceSubType. DiskSynthetic ) utilizzando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. WMI Parent = del controller SCSI percorso.

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

Poi allegare disco rigido virtuale (ResourceType. StorageExtent , ResourceSubType. VHD ) utilizzando Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = del disco sintetico percorso WMI, Connessione = * percorso del file 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 per i campioni di virtualizzazione e WMI Explorer .

Altri suggerimenti

Anche prendere un'occhiata a http://hypervlib.codeplex.com per un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top