Я пытаюсь создать метод в C #, в котором создается снимок виртуальной машины в Hyper-V.
Я использую новое пространство имен microsoft.management.infrastructure вместо system.management.instrumentation.
Моя самая большая проблема - создать объект CIM_VirtualSystemSettingData, который я передаю методу invoke в качестве ссылочного параметра.
Я не знаю, как установить атрибут InstanceId. Так как я всегда получаю сообщение об ошибке: не могу обработать Targetobject, потому что атрибут ключа имеет значение null (перевод с немецкого).
Когда я устанавливаю его вручную (что, вероятно, не следует делать), я получаю код ошибки:
WBEM_E_INVALID_METHOD_PARAMETERS
2147749935 (0x8004102F)
Parameters provided for the method are not valid.
Я также не уверен, является ли объект настройки виртуальной системы единственной проблемой. Но сообщение об ошибке настолько расплывчато, что я не знаю, с чего еще начать отладку.
мой код до сих пор:
// 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);
}
Это описание метода WMI от Microsoft для класса Msvm_VirtualSystemSnapshotService
uint32 CreateSnapshot(
[in] CIM_ComputerSystem REF AffectedSystem,
[in] string SnapshotSettings,
[in] uint16 SnapshotType,
[in, out] CIM_VirtualSystemSettingData REF ResultingSnapshot,
[out] CIM_ConcreteJob REF Job
Заранее спасибо.