Di programmazione associare un VHD a una distanza Hyper-V VM
-
18-09-2019 - |
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.
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.