【发布时间】:2019-03-05 15:25:10
【问题描述】:
我正在尝试在 C# 中创建一个方法,在该方法中创建 Hyper-V 中虚拟机的快照。
我正在使用新的 microsoft.management.infrastructure 命名空间,而不是 system.management.instrumentation。
我最大的问题是创建 CIM_VirtualSystemSettingData 对象,我将它作为引用参数传递给调用方法。 我不知道如何设置 InstanceId 属性。因为我总是收到错误消息:无法处理 Targetobject 因为键属性为空(从德语翻译)。 当我手动设置它时(我可能不应该这样做)我得到一个错误代码:
WBEM_E_INVALID_METHOD_PARAMETERS
2147749935 (0x8004102F)
Parameters provided for the method are not valid.
我也不确定 virtualsystemsetting 对象是否是唯一的问题。但是错误信息太模糊了,我不知道从哪里开始调试。
到目前为止我的代码:
// id is the Virtual machine i want the snapshot to be made of
public String CreateSnapshot(string id) {
string cimNamespace = @"root\virtualization\v2";
string cimMethodName = "CreateSnapshot";
string cimClassName = "Msvm_VirtualSystemSnapshotService";
CimInstance QuellComputer = Session.QueryInstances(@"ROOT\virtualization\v2", "WQL", $"SELECT * FROM CIM_Computersystem").Skip(2).FirstOrDefault();// WHERE Name={id}
CimClass systemSettingClass = Session.GetClass(cimNamespace, "CIM_VirtualSystemSettingData");
CimInstance systemSettingInstance = new CimInstance(systemSettingClass);
systemSettingInstance.CimInstanceProperties["SnapshotDataRoot"].Value = @"C:\Users\SnapshotsTemp";
systemSettingInstance.CimInstanceProperties["ElementName"].Value = @"SnapshotNo1";
systemSettingInstance.CimInstanceProperties["VirtualSystemType"].Value = 5;
CimMethodParametersCollection cimMethodParameters = new CimMethodParametersCollection();
CimMethodParameter cimMethodParameter1 = CimMethodParameter.Create("AffectedSystem", QuellComputer, CimType.Reference, CimFlags.In);
CimMethodParameter cimMethodParameter2 = CimMethodParameter.Create("SnapshotSettings", "", CimType.String, CimFlags.In);
CimMethodParameter cimMethodParameter4 = CimMethodParameter.Create("ResultingSnapshot", generateid, CimType.Reference, CimFlags.In);
CimMethodParameter cimMethodParameter3 = CimMethodParameter.Create("SnapshotType", 2, CimType.UInt16, CimFlags.In);
cimMethodParameters.Add(cimMethodParameter1);
cimMethodParameters.Add(cimMethodParameter4);
cimMethodParameters.Add(cimMethodParameter2);
cimMethodParameters.Add(cimMethodParameter3);
CimMethodResult result = Session.InvokeMethod(cimNamespace, cimClassName, cimMethodName, cimMethodParameters);
}
这是来自 Microsoft 的 Msvm_VirtualSystemSnapshotService 类的 WMI 方法描述
uint32 CreateSnapshot(
[in] CIM_ComputerSystem REF AffectedSystem,
[in] string SnapshotSettings,
[in] uint16 SnapshotType,
[in, out] CIM_VirtualSystemSettingData REF ResultingSnapshot,
[out] CIM_ConcreteJob REF Job
提前致谢。
【问题讨论】: