通过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个大类

逐个调用一下:
[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远程管理(一)的更多相关文章
- 远程管理无管理员权限的PC客户端
一.简介 为提高操作系统稳定性.流畅度,分公司同事PC用户没有administrator权限,导致同事不能对系统进行设置.不能自行安装软件.网管使用远程管理软件(如Teamviewer.QQ)为同事提 ...
- windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理
windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理 今天在dell r710 上用windows server 2008 r2企业版hyper v 做虚拟化,添 ...
- 设置Hyper V
1.打开服务器管理器 2.添加角色和功能 3.安装类型 -> 基于角色或基于功能的安装 4.服务器选择 -> 下一步 5.服务器角色 勾选"Hyper V"
- 【Linux远程管理】SSH协议远程管理
SSH(Secure Shell)协议.命令行界面(CLI)下的远程管理工具,几乎所有的操作系统都有,区别于Telnet,SSH在进行数据传送时会对数据进行加密,所以SSH是比较安全的协议.几乎所有的 ...
- C#中操作WMI的类库-实现远程登录共享
WMI是Windows Management Instrumentation的简称,即:视窗管理规范.在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件.通过WM ...
- 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 ...
- Linux远程管理之SVN,VNC
一.远程管理的基本概念 首先我们来初略的讲讲远程管理的一些基本概念.对于我们使用的计算机来说,如果是个人计算机,就没有远程管理这一概念了,想用的时候开机就能使用,而对于我们的服务器来说,就不同了,对于 ...
- 远程管理服务 Windows Remote Management (WS-Management)
Windows Remote Management (WS-Management) Windows 远程管理(WinRM)服务执行 WS-Management 协议来实现远程管理.WS-Managem ...
- Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
远程虚拟控制台依赖于java运行环境(jre),在通过浏览器打开链接前,系统必须安装jre环境,远程管理控制台其实就是一个java程序,打开相应的网站会下载一个jnlp(java网络加载协议)的文件, ...
随机推荐
- 发布(Windows)
发布(Windows) 本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另 ...
- 【项目】git的部署使用
一.官方网站 网站: https://git.oschina.net/ 注册.登陆 二.终端操作 打开终端,输入 # 切换目录,MAC中目录的第一个字符如果是 `.` 表示改文件夹是隐藏文件夹 $ c ...
- Effective Java从零开始 - 就是爱Java
或许你已经开始写Java了,或许只是想要一窥这个的世界,无论是抱着何种心情来看Java,从零开始,会一种没有负担,没有包袱的事,你会发现写程序不再是枯燥乏味,孤单寂寞的一个人,而是生活中最快乐的学习之 ...
- Linux下安装Perl和Perl的DBI模块
今天在虚拟机测试shell脚本的时候,有些命令使用不了. 比如说 mysqlhotcopy ,它提示Perl的版本太低. 我用的 RedHat9 的Perl才5.8.0版本...(2002年以前的) ...
- 将QT开发的界面程序封装成DLL,在VC中成功调用
最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...
- QAction系列详解
QAction系列详解 一.QAction类详解 [详细描述] QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中. 应用程序可以通过菜单,工具栏按 ...
- 清除NT Kernel & System占用80端口
运行'netstat -ano'发现80端口被system占用,进程号'4'转到任务管理器上看pid对应的进程描述是NT kernel & system. 解决方法: 1.1运行'regedi ...
- linux查看CPU高速缓存(cache)信息
一.Linux下查看CPU Cache级数,每级大小 dmesg | grep cache 实例结果如下: 二.查看Cache的关联方式 在 /sys/devices/system/cpu/中查看相应 ...
- Linux NFS服务器的安装与配置(转载)
一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...
- Redux中的重要概念
Action/Reducer/Store 首先,先看看第一张图,图中展示了Redux的单向数据流,以及Action.Reducer和Store这三个核心概念. 下面就围绕上图,非别介绍Action.R ...