通过WMI实现Hyper-V的远程管理
【摘要】
最近公司需要做Hyper-V的远程管理,可以实现启动、重启、关闭Hyper-V上面的虚拟机以及监控虚拟机运行的状态等。查阅了很多资料,最终决定通过调用的WMI包来实现。
【正文】
一Python实现Hyper-V的远程管理1、连接服务器并获取WMI对象
conn = wmi.WMI(computer=ipaddress,namespace='Root\\virtualization\\v2',user=username,password=password)2、获取虚拟机列表信息conn.query("select Name,ElementName,Status,EnabledState from Msvm_ComputerSystem")
Msvm_ComputerSystem是用来保存Hyper-V虚拟机的信息的类,该类的属性如下:
[Dynamic,
Provider("VmmsWmiInstanceAndMethodProvider")]
class
Msvm_ComputerSystem : CIM_ComputerSystem
{
string Caption;
string Description;
string ElementName;
datetime InstallDate;
uint16 OperationalStatus[];
string StatusDescriptions[];
string Status;
uint16 HealthState = 5;
uint16 EnabledState;
string OtherEnabledState;
uint16 RequestedState;
uint16 EnabledDefault = 2;
datetime TimeOfLastStateChange;
string CreationClassName;
string Name = "GUID";
string PrimaryOwnerName;
string PrimaryOwnerContact;
string Roles[];
string NameFormat;
string OtherIdentifyingInfo[];
string IdentifyingDescriptions[];
uint16 Dedicated[];
string
OtherDedicatedDescriptions[];
uint16 ResetCapability = 1;
uint16
PowerManagementCapabilities[];
uint64 OnTimeInMilliseconds;
datetime TimeOfLastConfigurationChange;
uint32 ProcessID;
uint16 AssignedNumaNodeList[];
};3、获取Msvm_VirtualSystemManagementService对象
//获取Msvm_ComputerSystem对象
vmSystem = conn.Msvm_ComputerSystem(ElementName="VmName")//获取Msvm_VirtualSystemManagementService对象
vmManagement =
conn.Msvm_VirtualSystemManagementService()4、执行启动、重启、关闭、保存等操作
vmSystem[0].RequestStateChange(state)
当state的值分别为不同数字时代表着不同的含义,具体见下表:
值
含义
2
开启虚拟机
3
关闭虚拟机
6
保存
11
重启