C# 设置Hyper-V快照';以编程方式命名
我正在用C#程序创建Hyper-V快照: (注:此代码取自) 有没有办法通过此WMI调用设置快照名称?否则,是否有人知道通过WMI调用重命名快照的有效解决方案?我已经找到了,但它有点模棱两可,不能提供任何解决方案 编辑:解决方案是在创建快照后重命名快照。下面是我使用Hans advice重命名快照的函数: 解决方案:C# 设置Hyper-V快照';以编程方式命名,c#,wmi,snapshot,hyper-v,C#,Wmi,Snapshot,Hyper V,我正在用C#程序创建Hyper-V快照: (注:此代码取自) 有没有办法通过此WMI调用设置快照名称?否则,是否有人知道通过WMI调用重命名快照的有效解决方案?我已经找到了,但它有点模棱两可,不能提供任何解决方案 编辑:解决方案是在创建快照后重命名快照。下面是我使用Hans advice重命名快照的函数: 解决方案: public static bool RenameSnapshot(string vmName, string snapshotName) { v
public static bool RenameSnapshot(string vmName, string snapshotName)
{
var result = false;
var scope = new ManagementScope(@"root\virtualization", null);
var vm = Utility.GetTargetComputer(vmName, scope);
// load snapshot
var objSnapshot = GetLastVirtualSystemSnapshot(vm);
// rename snapshot
objSnapshot["ElementName"] = snapshotName;
// save
var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
var inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystem");
inParams["ComputerSystem"] = vm.Path.Path;
inParams["SystemSettingData"] = objSnapshot.GetText(TextFormat.CimDtd20);
var outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystem", inParams, null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
result = true;
}
else
{
result = false;
}
inParams.Dispose();
outParams.Dispose();
vm.Dispose();
virtualSystemService.Dispose();
return result;
}
您必须使用
Msvm\u VirtualSystemManagementService
类的ModifyVirtualSystem
方法重命名hyper-v快照。有一个关于如何重命名hyper-v虚拟机的示例(您必须修改代码才能重命名快照)。此外,我还发现了如何重命名hyper-v快照。
希望,这有帮助
public static bool RenameSnapshot(string vmName, string snapshotName)
{
var result = false;
var scope = new ManagementScope(@"root\virtualization", null);
var vm = Utility.GetTargetComputer(vmName, scope);
// load snapshot
var objSnapshot = GetLastVirtualSystemSnapshot(vm);
// rename snapshot
objSnapshot["ElementName"] = snapshotName;
// save
var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
var inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystem");
inParams["ComputerSystem"] = vm.Path.Path;
inParams["SystemSettingData"] = objSnapshot.GetText(TextFormat.CimDtd20);
var outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystem", inParams, null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
result = true;
}
else
{
result = false;
}
inParams.Dispose();
outParams.Dispose();
vm.Dispose();
virtualSystemService.Dispose();
return result;
}