Hyper-V无法将现有的vhd文件附加到新创建的虚拟机上?

问题描述:

我的目标是以编程方式创建一个新的虚拟机,并将一个现有的vhdx文件附加到该机器。我的程序唯一的输入是VM名称和VHDX路径。我正在使用Hyper-V WMI Provider和Virtualization V2命名空间来实现这一点。基本上,我将 this文章作为脚本实施。正如this链接中提到的,我首先添加一个合成驱动器,然后尝试附加vhdx文件。Hyper-V无法将现有的vhd文件附加到新创建的虚拟机上?

我能够成功创建虚拟机并将合成驱动器添加到机器。但是,当我尝试添加硬盘vhdx文件时,出现以下错误。 “新Virtaul机器”未能添加资源(虚拟机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方法,请参阅this链接。当我分析VHDoutParams变量的错误信息和错误代码时,我只会看到下面的细节。 错误描述:'New Virtaul Machine'未能添加资源(虚拟机ID ...)。 错误代码:32768(失败) 工作状态:10

我不知道我在想什么。我以管理员身份在提升模式下运行程序。我没有在Hyper-V主机上安装防病毒软件。我也通过互联网彻底搜索,但找不到任何帮助。我错过了什么或做错了什么?

vhdx文件仅适用于第2代虚拟机。请检查可能是否也是错误未确定