通过Wmi实现Hyper-V远程管理(一)

最近公司需要做Hyper-V的远程管理,在现有产品基础上扩展对Hyper V的管理,实现远程开关机、远程开启虚拟机会话,其他内容可查看MSDN中有对Hyper-V的描述相关实例代码Wmi操作hyper的工具类 hyper-V

ok,废话不说,正文开始...

1.安装hyper-v虚拟机,这里安装的是2012版,安装好之后创建两个虚拟机

2.查阅了好多资料,通用的方式是用Wmi来与hyper进行数据交互,通过工具扫描一下hyper的wmi节点

发现一共有22个直属类

每个类都逐个查看一下,发现能够交互的只有3个大类

逐个调用一下:

1 [dynamic: ToInstance, provider("VmmsWmiInstanceAndMethodProvider"), Locale(1033)]
2 class Msvm_ComputerSystem : CIM_ComputerSystem
3 {
4     [read, ArrayType("Indexed")] uint16 AssignedNumaNodeList[];
5     [read, Units("MilliSeconds")] uint64 OnTimeInMilliseconds;
6     [read] uint32 ProcessID;
7     [read] datetime TimeOfLastConfigurationChange;
8     [Implemented, ValueMap{"0", "4096", "32768", "32769", "32770", "32771", "32772", "32773", "32774", "32775", "32776", "32777", "32778"}, Bypass_GetObject, ModelCorrespondence{"CIM_EnabledLogicalElement.RequestedState"}] uint32 RequestStateChange([IN, ValueMap{"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "..", "32768..65535"}, ModelCorrespondence{"CIM_EnabledLogicalElement.RequestedState"}] uint16 RequestedState, [OUT] CIM_ConcreteJob ref Job, [IN, SubType("Interval"): ToInstance ToSubClass] datetime TimeoutPeriod);
9 };

其中:

"0", "4096", "32768", "32769", "32770", "32771", "32772", "32773", "32774", "32775", "32776", "32777", "32778"

"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "..", "32768..65535"

这些数字分别代表虚拟机实例的各个状态,如:运行,关机,正在关机,等等。如:

    0             Unknown 
    2            Running
    3            Off
    32768    Paused        
    32769    Suspended     
    32770    Starting       
    32771    Snapshotting  
    32772    Migrating
    32773    Saving         
    32774    Stopping  
    32775    Deleted
    32776    Pausing        
    32777    Resuming  
View Code

 


保存虚拟机数据的类为 Msvm_ComputerSystem,通过调用Msvm_ComputerSystem可以获取远程hyper下各虚拟机信息,该类包含宿主机的描述:

instance of Msvm_ComputerSystem
{
    AssignedNumaNodeList = NULL;
    Caption = "宿主计算机系统";
    CreationClassName = "Msvm_ComputerSystem";
    Dedicated = NULL;
    Description = "Microsoft 宿主计算机系统";
    ElementName = "HYPER-V";
    EnabledDefault = 2;
    EnabledState = 2;
    HealthState = 5;
    IdentifyingDescriptions = NULL;
    InstallDate = NULL;
    Name = "HYPER-V";
    NameFormat = NULL;
    OnTimeInMilliseconds = NULL;
    OperationalStatus = {2};
    OtherDedicatedDescriptions = NULL;
    OtherEnabledState = NULL;
    OtherIdentifyingInfo = NULL;
    PowerManagementCapabilities = NULL;
    PrimaryOwnerContact = NULL;
    PrimaryOwnerName = NULL;
    ProcessID = NULL;
    RequestedState = 12;
    ResetCapability = 1;
    Roles = NULL;
    Status = "OK";
    StatusDescriptions = {"确定"};
    TimeOfLastConfigurationChange = NULL;
    TimeOfLastStateChange = NULL;
};

虚拟机的描述:

instance of Msvm_ComputerSystem
{
    AssignedNumaNodeList = {0};
    Caption = "虚拟机";
    CreationClassName = "Msvm_ComputerSystem";
    Dedicated = NULL;
    Description = "Microsoft 虚拟机";
    ElementName = "windows2012";
    EnabledDefault = 2;
    EnabledState = 2;
    HealthState = 5;
    IdentifyingDescriptions = NULL;
    InstallDate = "20160719031827.000000-000";
    Name = "F6F52FD7-42B6-4C2D-BADC-C61F9B5FFD21";
    NameFormat = NULL;
    OnTimeInMilliseconds = "9193908";
    OperationalStatus = {2};
    OtherDedicatedDescriptions = NULL;
    OtherEnabledState = NULL;
    OtherIdentifyingInfo = NULL;
    PowerManagementCapabilities = NULL;
    PrimaryOwnerContact = NULL;
    PrimaryOwnerName = NULL;
    ProcessID = 4064;
    RequestedState = 12;
    ResetCapability = 1;
    Roles = NULL;
    Status = "OK";
    StatusDescriptions = {"正常运行"};
    TimeOfLastConfigurationChange = "20160719084459.532773-000";
    TimeOfLastStateChange = "20160719084459.000000-000";
};
View Code
instance of Msvm_ComputerSystem
{
    AssignedNumaNodeList = {};
    Caption = "虚拟机";
    CreationClassName = "Msvm_ComputerSystem";
    Dedicated = NULL;
    Description = "Microsoft 虚拟机";
    ElementName = "win2008";
    EnabledDefault = 2;
    EnabledState = 3;
    HealthState = 5;
    IdentifyingDescriptions = NULL;
    InstallDate = "20160719081005.000000-000";
    Name = "7A591782-9EEC-46CD-AE43-AFE4EFD23390";
    NameFormat = NULL;
    OnTimeInMilliseconds = "0";
    OperationalStatus = {2};
    OtherDedicatedDescriptions = NULL;
    OtherEnabledState = NULL;
    OtherIdentifyingInfo = NULL;
    PowerManagementCapabilities = NULL;
    PrimaryOwnerContact = NULL;
    PrimaryOwnerName = NULL;
    ProcessID = NULL;
    RequestedState = 12;
    ResetCapability = 1;
    Roles = NULL;
    Status = "OK";
    StatusDescriptions = {"正常运行"};
    TimeOfLastConfigurationChange = "20160719104106.665157-000";
    TimeOfLastStateChange = "20160719104106.000000-000";
};
View Code

虚拟机信息获取完毕!

原文地址:https://www.cnblogs.com/lsqandzy/p/5685926.html