通过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   
    32773    Saving         
    32774    Stopping      
    32776    Pausing        
    32777    Resuming

保存虚拟机数据的类为 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";
};

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

虚拟机信息获取完毕!

时间: 2024-07-28 14:34:47

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

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

Windows Remote Management (WS-Management) Windows 远程管理(WinRM)服务执行 WS-Management 协议来实现远程管理.WS-Management 是用于远程软件和硬件管理的标准 Web 服务协议.WinRM 服务侦听网络上的 WS-Management 请求并对它们进行处理.通过组策略或使用 winrm.cmd 命令行工具的侦听程序,来配置 WinRM 服务,以使其可通过网络侦听.WinRM 服务提供对 WMI 数据的访问并启用事件集

[Cluster]群集中Hyper-V管理器无法远程管理其他节点VM/迁移异常

环境 4个节点的Hyper-V 群集 故障现象 Hyper-V管理器无法远程管理群集中所有Hyper-V 群集中的某些VM无法成功迁移 故障原因 群集节点时间不一致 详细描述和排查过程 Hyper-V管理器无法远程管理群集中所有Hyper-V,如图: 创建测试VM时出现警报如图: 查看报告 VM是可以正常创建的,但在尝试迁移VM时. 同一群集中不同节点间迁移VM时出现"启动VM迁移出错."查看详细信息"无法通过WMI连接到该节点主机.原因可能是网络问题或该节点主机上的防火墙配

Hyper v 单网卡 外部网络

先说一下环境: WIN 8.1 单网卡(有 无线 和 有线网卡, 但是没有多余的网络接口可插,还是等于单网卡) Hyper V 有3种虚拟交换机类型: 专用 / 内部 / 外部 各有各的用处, 我理解也不多,不多嘴误导大家. 今天说这个,是因为要做CSS和JS兼容调试, 开发用的都是IE11,用IE11的调试工具将文档模式调为 IE8 ,发现 jQuery.Validation 不能常运行. 但是用虚拟机装的 XP上直接用IE8 ,却没有任何问题,真的很蛋疼. 工作用的有两台电脑,一台装的是WI

SSH远程管理OpenSSH使用

SSH(secure shell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能.SSH协议对于通信双方的数据传输进行了加密处理,其中包括你用户登录时输入的用户口令.与早期的telnet远程登录.RSH远程执行命令.RCP远程文件复制等应用相比,SSH协议提供了更好的安全性. OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX.Linux操作系统.关于Openssh项目的更多内容可以访问其官网http://www.openssh.com. Openssh是一种典

11.交换路由远程管理

我们可以通过Telnet协议对交换路由进行远程操作. VTY叫虚拟终端,是一种网络设备的连接方式.我们通过配置设备中的VTY然后就可以被远程PC通过Telnet协议进行远程连接. CISCO思科交换机路由配置VTY虚拟终端: v 创建并进入一个虚接口:(config)# interface vlan 10 v 配置虚接口地址:(config-if)# ip add 192.168.1.1 255.255.255.0 v 打开虚接口:(config-if)# no shutdown v 配置默认网

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

SSH(Secure Shell)协议.命令行界面(CLI)下的远程管理工具,几乎所有的操作系统都有,区别于Telnet,SSH在进行数据传送时会对数据进行加密,所以SSH是比较安全的协议.几乎所有的类UNIX操作系统都是采用SSH来进行远程管理(Linux,BSD,Mac OS等). (1)绝大多数Linux版本默认使用的SSH是OpenSSH,通过ssh -V命令可以查看ssh的信息. (2)SSH分为服务器端和客户端,对于服务器端默认是开机启动的,作为常驻服务存在,可以通过 service

通过 libvirt 远程管理虚拟机

前一篇介绍了在 centos 6 上安装KVM虚拟机和virsh相关命令,这里再介绍一下如何从远程管理节点上虚拟机,就是登录到远程服务器上的virsh命令行, 2台主机: node4: 192.168.1.166 node5: 192.168.1.143 node4 作为远程libvirt的服务器,上面有已经创建的虚拟机,现在node5上通过以下2种方式管理远程服务器上的虚拟机: 通过qemu+ssh方式 通过qemu+tcp方式 node5上安装libvirt及相关工具包,我这里安装了这些,

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2 1. 基本命令 安装集群故障转移角色 Install-WindowsFeature -name Failover-Clustering -IncludeManagementTools 关闭防火墙 netsh advfirewall set allprofiles state off 关闭IPv6 New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSe

Hyper - V (四)

安装虚拟机 新建虚拟机 为新建的虚拟机起名,默认保存路径为前面设置的默认路径 指定虚拟机内存大小 指定虚拟机网卡连接到外部网络还是内部网络(或专用网络) 创建虚拟硬盘,指定硬盘存储路径及硬盘大小 选择安装文件的引导路径,支持光盘安装,ISO安装等方式. 这里我们选择通过光驱引导的方式来安装系统 完成虚拟机设置. 右键点击新建的虚拟机,设置可以更改虚拟机的配置选项. 将ISO文件加载到虚拟机中,即可以实现光盘引导功能. 启动虚拟机-- 安装系统 Hyper - V (四),布布扣,bubuko.c