最近公司需要做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. 序列化layer创建的弹出表单并ajax提交

    /** *createTime:2015-09-13 *updateTime:2015-09-13 *author:刘俊 *phone:13469119119 *QQ:418873053 **/ va ...

  2. 新手必看的jQuery优化笔记十则

    jQuery优化 1.简介 jQuery正在成为Web开发人员首选的JavaScript库,作为Web开发者,除了要了解语言和框架的应用技巧外,如何提升语言本身的性能也是开发人员应该思考的问题.文章就 ...

  3. HTML+CSS学习

    1.彻底弄懂CSS盒子模式(DIV布局快速入门) 2.在CSS中,BOX的Padding属性的数值赋予顺序为padding:10px; 四个内边距都是10px padding:5px 10px; 上下 ...

  4. 最大连续子序列(HDU 1231 DP)

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. Kafka与Logstash的数据采集

    Kafka与Logstash的数据采集 基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始 ...

  6. 处理事件的方式:两种类的覆盖处理(自己管理,覆盖专用事件函数;自己统一管理,覆盖QWidget::Event通用函数),一种对象的处理(父控件统一管理,即安装过滤器),两种全局处理(QCoreApplication安装过滤器;覆盖notify方法)

    虽然只有一句话,但却是我自己的心得. 特别注意,bool QCoreApplication::notify(QObject *receiver, QEvent *event) 明确指明了要发送的对象, ...

  7. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  8. C# Directory类

    Directory类 是一个静态类,常用的地方为创建目录和目录管理. 一下来看看它提供的操作. 1.CreateDirectory 根据指定路径创建目录.有重载,允许一次过创建多个目录. 2.Dele ...

  9. Linux dirname、basename(转)

    首先使用 --help 参数查看一下.basename命令参数很少,很容易掌握. $ basename --help 用法示例: $ basename /usr/bin/sort       输出&q ...

  10. [置顶] 玩转Eclipse — 自动注释插件JAutodoc

    代码注释是一种良好的编程习惯.不管对于他人还是自己,注释都有助于代码的阅读和理解.手动添加注释,是一个非常费时和繁琐的工作,严重影响软件开发效率,这也是绝大多数程序员不愿添加注释的主要原因.JAuto ...