通過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

虛擬機信息獲取完畢!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM