如何从 Hyper-V 集群中删除虚拟机?
How to remove virtual machine from Hyper-V cluster?
有一个集群节点,我在上面创建了虚拟机:
之后,我使用方法 AddVirtualMachine 将 existing 虚拟机添加到集群。
但是没有对应的方法DeleteVirtualMachine
。
如果我只是从节点中删除虚拟机,那么集群上会留下以下工件:
如何通过 WMI 从 Hyper-V 集群中删除我的虚拟机?
我反编译了Microsoft.FailoverClusters.PowerShell.dll
,发现我们需要使用WMIclassMSCluster_ResourceGroup。
这是通过 powershell 完成的方法:
(Get-WmiObject -namespace root\mscluster -class MsCluster_ResourceGroup -filter "name='vm-name'").DestroyGroup()
这是我在 C# 代码中使用的 MSCluster_ResourceGroup 的对象模型:
public class MsResourceGroup : ManagementObjectWrapperBase
{
public static MsResourceGroup Create(
ManagementObject fromResourceGroupManagementObject)
{
var name = fromResourceGroupManagementObject.GetStringPropertyValue("Name");
return new MsResourceGroup(
name: name,
resourceGroupManagementObject: fromResourceGroupManagementObject);
}
private MsResourceGroup(
string name,
ManagementObject resourceGroupManagementObject)
: base(resourceGroupManagementObject)
{
Name = name;
}
public string Name { get; }
public void DestroyGroup()
{
AsManagementObject.Invoke(
methodName: "DestroyGroup",
fillInvocationParameters: inputParameters => { });
}
}
有一个集群节点,我在上面创建了虚拟机:
之后,我使用方法 AddVirtualMachine 将 existing 虚拟机添加到集群。
但是没有对应的方法DeleteVirtualMachine
。
如果我只是从节点中删除虚拟机,那么集群上会留下以下工件:
如何通过 WMI 从 Hyper-V 集群中删除我的虚拟机?
我反编译了Microsoft.FailoverClusters.PowerShell.dll
,发现我们需要使用WMIclassMSCluster_ResourceGroup。
这是通过 powershell 完成的方法:
(Get-WmiObject -namespace root\mscluster -class MsCluster_ResourceGroup -filter "name='vm-name'").DestroyGroup()
这是我在 C# 代码中使用的 MSCluster_ResourceGroup 的对象模型:
public class MsResourceGroup : ManagementObjectWrapperBase
{
public static MsResourceGroup Create(
ManagementObject fromResourceGroupManagementObject)
{
var name = fromResourceGroupManagementObject.GetStringPropertyValue("Name");
return new MsResourceGroup(
name: name,
resourceGroupManagementObject: fromResourceGroupManagementObject);
}
private MsResourceGroup(
string name,
ManagementObject resourceGroupManagementObject)
: base(resourceGroupManagementObject)
{
Name = name;
}
public string Name { get; }
public void DestroyGroup()
{
AsManagementObject.Invoke(
methodName: "DestroyGroup",
fillInvocationParameters: inputParameters => { });
}
}