hyperv wmi Как передать параметр в виде строки? - PullRequest
0 голосов
/ 26 февраля 2020

Я использую более новую структуру Microsoft.Management.Infrastructure и хочу передать параметр в метод ModifySystemSettings класса Msvm_VirtualSystemManagementService:

https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/modifysystemsettings-msvm-virtualsystemmanagementservice

Тип параметра - это строка, в которую встроен экземпляр Msvm_VirtualSystemSettingData.

В более старой версии System.Management можно использовать ManagementBaseObject.GetText (TextFormat.WmiDtd20) для преобразования его в строку:

https://docs.microsoft.com/en-us/dotnet/api/system.management.managementbaseobject.gettext?view=netframework-4.8

Следующий код показывает текущую реализацию метода ModifySystemSettings. Проблема в том, что snapshotInstance.ToString () явно неверен. Кто-нибудь знает, как правильно передать параметр?


CimInstance snapshotInstance = session.EnumerateAssociatedInstances(hvNamespace, vm, "Msvm_MostCurrentSnapshotInBranch", "Msvm_VirtualSystemSettingData", null, null).FirstOrDefault();

snapshotInstance.CimInstanceProperties["ElementName"].Value = "testSnapshot";
CimMethodParametersCollection modifySystemSettingsParameters = new CimMethodParametersCollection
{
     CimMethodParameter.Create("SystemSettings",snapshotInstance.ToString(),CimType.String, CimFlags.In)
       };

if(virtualSystemManagementService != null)
{
      CimMethodResult result = session.InvokeMethod(hvNamespace, virtualSystemManagementService, "ModifySystemSettings", modifySystemSettingsParameters);
      Console.WriteLine(result.ReturnValue.Value.ToString());
}

Моя цель - изменить имя снимка.

1 Ответ

0 голосов
/ 03 марта 2020

через некоторое время я придумал правильное решение.

CimSerializer помог мне преобразовать его в строку.

Это код позади:

CimSerializer serializer = CimSerializer.Create();
byte[] serializedClass = serializer.Serialize(snapshotInstance, InstanceSerializationOptions.None);
CimMethodParametersCollection modifySystemSettingsParameters = new CimMethodParametersCollection
{
       CimMethodParameter.Create("SystemSettings",System.Text.Encoding.Unicode.GetString(serializedClass),CimType.String, CimFlags.In)
};
...