【问题标题】:HyperV WMI Apply Snapshot in c#HyperV WMI 在 c# 中应用快照
【发布时间】:2020-02-11 16:10:26
【问题描述】:

我想使用 WMI 应用快照并得到一个名为“WS-Management 服务无法处理请求,未知错误:HRESULT 0x8004102f”的错误 如果参数设置错误,就会出现这种情况。 所以我认为它与输入参数有关:

uint32 ApplySnapshot(
  [in]  CIM_VirtualSystemSettingData REF Snapshot,
  [out] CIM_ConcreteJob              REF Job
);

ApplySnapshot-description 的链接:https://docs.microsoft.com/de-de/windows/win32/hyperv_v2/applysnapshot-msvm-virtualsystemsnapshotservice?redirectedfrom=MSDN#syntax

我应用快照的代码:

public async Task ApplySnapshot(PublicServerSnapshotInfo snapshot, PublicServerInfo publicServer)
        {            
            CimSession session = GetCimSession(publicServer.HostName);
            CimInstance ParamSnapshot = session.QueryInstances(@"root\virtualization\v2", "WQL", "SELECT * From CIM_VirtualSystemSettingData WHERE ConfigurationID='" + snapshot.SnapshotID + "'").FirstOrDefault();

            CimMethodParametersCollection cimMethodParameters = new CimMethodParametersCollection();
            cimMethodParameters.Add(CimMethodParameter.Create("Snapshot", ParamSnapshot,CimType.Reference, CimFlags.In));

            CimMethodResult result = session.InvokeMethod(@"root\virtualization\v2", "Msvm_VirtualSystemSnapshotService", "ApplySnapshot", cimMethodParameters);
        }

当我想启动和关闭虚拟机时,我已经有一些类似的代码并且它可以工作。

我的启动和停止虚拟机的代码:(这个很好用)

public async Task RequestStateChange(PublicServerInfo publicServer, string action)
        {
            CimSession session = GetCimSession(publicServer.HostName);
            CimInstance vm = session.QueryInstances(@"root\virtualization\v2", "WQL", "SELECT * FROM Msvm_ComputerSystem WHERE Name='" + publicServer.MachineID + "'").FirstOrDefault();
            CimMethodParametersCollection parameters = new CimMethodParametersCollection();
            if (action.ToLower() == "start")
            {
                parameters.Add(CimMethodParameter.Create("RequestedState", (UInt16)2, CimFlags.In));
            }
            else if (action.ToLower() == "shutdown")
            {
                parameters.Add(CimMethodParameter.Create("RequestedState", (UInt16)4, CimFlags.In));
            }

            CimMethodResult result = session.InvokeMethod(@"root\virtualization\v2", vm, "RequestStateChange", parameters);
        }

RequestsStateChange 链接:https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/requeststatechange-msvm-computersystem

感谢您的每一个回答

【问题讨论】:

    标签: c# wmi snapshot hyper-v


    【解决方案1】:

    我终于找到了解决方案

    public async Task ApplySnapshot(PublicServerSnapshotInfo snapshot, PublicServerInfo publicServer)
            {            
                CimSession session = GetCimSession(publicServer.HostName);
                CimInstance ParamSnapshot = session.QueryInstances(hvNamespace, "WQL", "SELECT * From CIM_VirtualSystemSettingData WHERE ConfigurationID='" + snapshot.SnapshotID + "'").FirstOrDefault();
                var SnapshotService = session.EnumerateInstances(hvNamespace, "Msvm_VirtualSystemSnapshotService").First();
    
                CimMethodParametersCollection cimMethodParameters = new CimMethodParametersCollection {
                    CimMethodParameter.Create("Snapshot", ParamSnapshot, CimType.Reference, CimFlags.In)
                };
    
                CimMethodResult result = session.InvokeMethod(hvNamespace, SnapshotService, "ApplySnapshot", cimMethodParameters);
    
            }
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      相关资源
      最近更新 更多