Question

Utilisation du Gestionnaire Hyper-V, je peux connecter à un hôte VM à distance, accédez aux paramètres d'une machine virtuelle, et ajouter un fichier .VHD existant comme un nouveau disque dur. Si l'hôte VM est en cours d'exécution Server 2008 R2, et le disque est relié à un contrôleur SCSI, je peux même le faire pendant que la machine virtuelle est en cours (voir Quoi de neuf dans Hyper-V R2 ).

Faire cela, tout fonctionne manuellement grand. Le problème est, maintenant je veux automatiser afin que je puisse attacher différentes VHD sur la volée lors de certains tests automatisés.

Je l'ai déjà code C # qui se connecte à l'hôte VM à distance via WMI et démarrages / arrêts machines virtuelles en appelant liste des classes de virtualisation WMI , je ne peux pas comprendre comment le faire.

Le plus proche que j'ai trouvé est le mont méthode de Msvm_ImageManagementService , mais semble monter un VHD à l'intérieur du système d'exploitation actuel, ce qui est pas ce que je veux.

Était-ce utile?

La solution

Il est nécessaire d'ajouter disque synthétique (ResourceType. Disque , ResourceSubType. DiskSynthetic ) à l'aide Msvm_VirtualSystemManagementService.AddVirtualSystemResources. chemin WMI parent = contrôleur 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);

Puis attacher disque dur virtuel (ResourceType. StorageExtent , ResourceSubType. VHD ) à l'aide Msvm_VirtualSystemManagementService.AddVirtualSystemResources. Parent = chemin WMI disque synthétique, Connexion = * Chemin du fichier .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);

Utilisez Utilitaires communs pour les échantillons de virtualisation et WMI Explorateur .

Autres conseils

Jetez aussi un coup d'œil à http://hypervlib.codeplex.com pour un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top