Frage

Mit Hyper-V-Manager, kann ich auf die Einstellungen einer VM auf eine Remote-VM-Host, gehe verbinden, und fügen Sie eine vorhandene VHD-Datei als eine neue Festplatte. Wenn die VM Host-Server 2008 R2 ausgeführt wird, und die Platte mit einem SCSI-Controller angeschlossen wird, kann ich auch dies tun, während die VM läuft (siehe Was in Hyper-V R2 neu).

Auf diese manuell, alles funktioniert super. Das Problem ist, jetzt will ich es automatisieren, so kann ich verschiedene VHDs on-the-fly während einiger automatisierten Tests befestigen.

Ich habe bereits C # Code, der auf dem Remote-VM Host über WMI und startet verbindet / stoppt VMs durch den Aufruf von Liste der WMI-Virtualisierungsklassen , ich kann nicht herausfinden, wie dies zu tun.

Der nächstgelegene ich gefunden habe, ist die Berg Methode der Msvm_ImageManagementService , aber das erscheint eine VHD innerhalb der aktuellen OS zu montieren, die nicht das, was ich will.

War es hilfreich?

Lösung

Es ist notwendig, hinzuzufügen synthetische Platte (Resource. Datenträger , ResourceSubType. DiskSynthetic ) mit Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = SCSI-Controller des WMI-Pfad.

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

Dann befestigen virtuelle Festplatte (Resource. StorageExtent , ResourceSubType. VHD ) mit Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = Synthetic Platte der WMI-Pfad, Verbindung = * VHD-Dateipfad.

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

Verwenden Sie Common Utilities für die Virtualisierung Proben und WMI Explorer .

Andere Tipps

Schauen Sie auch unter http://hypervlib.codeplex.com für ein Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top