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

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

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

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

发现一共有22个直属类

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

逐个调用一下:

 [dynamic: ToInstance, provider("VmmsWmiInstanceAndMethodProvider"), Locale()]
class Msvm_ComputerSystem : CIM_ComputerSystem
{
[read, ArrayType("Indexed")] uint16 AssignedNumaNodeList[];
[read, Units("MilliSeconds")] uint64 OnTimeInMilliseconds;
[read] uint32 ProcessID;
[read] datetime TimeOfLastConfigurationChange;
[Implemented, ValueMap{"", "", "", "", "", "", "", "", "", "", "", "", ""}, Bypass_GetObject, ModelCorrespondence{"CIM_EnabledLogicalElement.RequestedState"}] uint32 RequestStateChange([IN, ValueMap{"", "", "", "", "", "", "", "", "", "", "", "..", "32768..65535"}, ModelCorrespondence{"CIM_EnabledLogicalElement.RequestedState"}] uint16 RequestedState, [OUT] CIM_ConcreteJob ref Job, [IN, SubType("Interval"): ToInstance ToSubClass] datetime TimeoutPeriod);
};

其中:

"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"

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

                 Unknown
Running
Off
Paused
Suspended
Starting
Snapshotting
Migrating
Saving
Stopping
Deleted
Pausing
Resuming

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

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

虚拟机的描述:

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

虚拟机信息获取完毕!

通过Wmi实现Hyper-V远程管理(一)的更多相关文章

  1. 远程管理无管理员权限的PC客户端

    一.简介 为提高操作系统稳定性.流畅度,分公司同事PC用户没有administrator权限,导致同事不能对系统进行设置.不能自行安装软件.网管使用远程管理软件(如Teamviewer.QQ)为同事提 ...

  2. windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理

    windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理 今天在dell r710 上用windows server 2008 r2企业版hyper v 做虚拟化,添 ...

  3. 设置Hyper V

    1.打开服务器管理器 2.添加角色和功能 3.安装类型 -> 基于角色或基于功能的安装 4.服务器选择 -> 下一步 5.服务器角色 勾选"Hyper V"

  4. 【Linux远程管理】SSH协议远程管理

    SSH(Secure Shell)协议.命令行界面(CLI)下的远程管理工具,几乎所有的操作系统都有,区别于Telnet,SSH在进行数据传送时会对数据进行加密,所以SSH是比较安全的协议.几乎所有的 ...

  5. C#中操作WMI的类库-实现远程登录共享

    WMI是Windows Management Instrumentation的简称,即:视窗管理规范.在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件.通过WM ...

  6. Windows 8.1 IIS 8.5 远程管理 Windows 2008 R2 IIS 7.0

    案例: Windows 8.1 x64 IIS 8.5 inetmgr_amd64_v1.1_en-US.msi Windows 2008 R2  x64 IIS  7.0 在Win8.1 通过IIS ...

  7. Linux远程管理之SVN,VNC

    一.远程管理的基本概念 首先我们来初略的讲讲远程管理的一些基本概念.对于我们使用的计算机来说,如果是个人计算机,就没有远程管理这一概念了,想用的时候开机就能使用,而对于我们的服务器来说,就不同了,对于 ...

  8. 远程管理服务 Windows Remote Management (WS-Management)

    Windows Remote Management (WS-Management) Windows 远程管理(WinRM)服务执行 WS-Management 协议来实现远程管理.WS-Managem ...

  9. Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法

    远程虚拟控制台依赖于java运行环境(jre),在通过浏览器打开链接前,系统必须安装jre环境,远程管理控制台其实就是一个java程序,打开相应的网站会下载一个jnlp(java网络加载协议)的文件, ...

随机推荐

  1. project euler 16:Power digit sum

    >>> sum([int(i) for i in str(2**1000)]) 1366 >>>

  2. Python学习(六) Python数据类型:字典(重要)

    字典dict: 字典其实就相当于java里面的Map,用来存储键值对的.其中存储的数据时无序的. 假如有这样的数据: t1=['name','age','sex'] t2=['tom',30,'mal ...

  3. 愉快的开始 - 零基础入门学习Python000

    愉快的开始 让编程改变世界 Change the world by program 为什么是Python 既然有各种各样的编程语言可以选择,小甲鱼为什么极力鼓励大家来学习Python呢? 跨平台哦亲 ...

  4. Logging in Java

    Common logging: Log4j1仅仅作为一个实际的日志框架,commons-logging作为门面,统一各种日志框架的混乱格局 基本的commons logging Dependency: ...

  5. Ext常用Tool

    Ext.onReady(function() { var mPanel = Ext.create('Ext.panel.Panel', { title: 'Panel', width: '100%', ...

  6. MFC radio button 绑定变量用法

    我们在对话框中拖动一个radio button控件,然后点击类向导,结果却发现在Member Variables里看不到Radio控件的ID.这是为什么? 2.1 三个Radio Button,ID分 ...

  7. 【转】android是32-bit系统还是64-bit系统

    原文网址:http://www.cnblogs.com/pengwang/archive/2013/03/11/2954496.html 电脑CPU分32位和64位,这个我们都知道.用了这么长时间的a ...

  8. find -exec

    find -exec 的标准写法 find ./ -name "*.tmp" -exec rm -rf "{}" \; find -exec 这个命令组合很好用 ...

  9. distinct() 去重复

    distinct 是对整个结果集进行数据重复抑制,而不是针对每一个列. select distinct FDepartment from T_Employee

  10. jquery第二期:三个例子带你走进jquery

    jquery是完全支持css的,我们举个例子来看看使用jquery的方便之处,这功劳是属于选择器的: 例1: <!DOCTYPE html PUBLIC "-//W3C//DTD HT ...