Назад | Перейти на главную страницу

Hyper-V не может прикрепить существующий файл VHD к вновь созданной виртуальной машине?

Моя цель - программно создать новую виртуальную машину и прикрепить к ней существующий файл vhdx. Единственными входными данными для моей программы являются имя виртуальной машины и путь к VHDX. Я реализую это с помощью Hyper-V WMI Provider и Virtualization V2 namespace. В основном я реализую то, что дано в этот статья в виде сценария. Как упоминалось в этот ссылку, я сначала добавляю синтетический диск, а затем пытаюсь прикрепить файл vhdx.

Я могу успешно создать виртуальную машину и добавить к ней синтетический диск. Однако, когда я пытаюсь добавить файл vhdx жесткого диска, я получаю следующую ошибку. 'New Virtaul Machine' failed to add resources.(Virtual machine ID ...). Код ошибки задания - 32768, а состояние задания - 10, что как раз соответствует «Сбой».

Это код, который я использую для подключения файла vhdx.

//Add VHD
    ManagementObject^ hardDisk = GetResourceAllocationsettingDataDefault(scope, 31, "Microsoft:Hyper-V:Virtual Hard Disk", "-");
    hardDisk = (ManagementObject^)hardDisk->Clone();
    array<String^>^ connection = gcnew array<String^>(1);
    connection[0]="E:\\test.vhdx"; //Path to *.vhd file     

    hardDisk["Parent"] = synthetic->Path->Path; //WMI path-> This is the path of the synthetic drive that I added in the previous step.
    hardDisk["HostResource"] = connection;

    array<String^> ^ HDs = gcnew array<String^>(1);
    HDs[0] = hardDisk->GetText(TextFormat::WmiDtd20);

    ManagementBaseObject^ VHDinParams = vmtoCreate->GetMethodParameters("AddResourceSettings");
    VHDinParams["AffectedConfiguration"] = settings->Path->Path;
    VHDinParams["ResourceSettings"] = HDs;

    ManagementBaseObject^ VHDoutParams = vmtoCreate->InvokeMethod("AddResourceSettings", VHDinParams, nullptr);

Для метода GetResourceAllocationsettingDataDefault см. этот ссылка на сайт. Когда я анализирую переменную VHDoutParams на предмет сообщения об ошибке и кода ошибки, я просто получаю данные ниже.

Error description: 'New Virtaul Machine' failed to add resources.(Virtual machine ID ...). 
Error Code: 32768(Failed)
Job State: 10

Я не знаю, что мне не хватает. Я запускаю программу в повышенном режиме как администратор. У меня не установлен антивирус на хост-машине Hyper-V. Я также тщательно поискал в Интернете, но не нашел ничего полезного. Что я упускаю или делаю не так?

Я сам решил эту проблему. AP родственно, добавляя жесткий диск, я должен указать путь синтетического диска, который я получил из выходных параметров предыдущего вызова AddResourceSettings, а не входной параметр. После первого вызова AddResourceSettings для добавления синтетического диска я должен сделать следующее:

ManagementObject^ addedSynthetic;
    if (syntheticoutParams["ResultingResourceSettings"] != nullptr)
    {           
        addedSynthetic = gcnew ManagementObject(((array<String^>^)syntheticoutParams["ResultingResourceSettings"])[0]);
        addedSynthetic->Get();
    }

Затем я должен указать путь «addedSynthetic» в качестве родительского для второго вызова.

жесткий диск ["Родительский"] = добавленный Синтетический-> Путь-> Путь;