【发布时间】:2012-10-19 08:33:19
【问题描述】:
我正在尝试使用 Python 在 HyperV 服务器上编写控制虚拟机。我首先连接到运行 HyperV 服务器的服务器:
connection = wmi.connect_server(server="servername", namespace=r"root\virtualization", user=r"username", password=r"password")
wmiServerConnection = wmi.WMI(wmi=connection)
这给了我一个用于此连接的wmi 对象。
对于停止和启动虚拟机,我可以简单地使用:
#get the wmi object representing the VM
vmSystem = wmiServerConnection.Msvm_ComputerSystem(ElementName="VmName")
#send change request to vm
vmSystem[0].RequestStateChange(3)
但在启动 VM 之前,我想应用某个快照。
Msvm_VirtualSystemManagementService 类为此提供了一个方法 - ApplyVirtualSystemSnapshot/ApplyVirtualSystemSnapshotEx。它需要SnapshotSettingData 作为参数,我想我可以使用同一类的GetSummaryInformation 方法得到那个参数。 MSDN 说这个方法返回一个Msvm_SummaryInformation 类。
我这样称呼这个函数:
#get the wmi class object
vmManagement = wmiServerConnection.Msvm_VirtualSystemManagementService()
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107])
这应该为我提供 HyperV 服务器上所有 VM 的名称和快照信息。但我得到的只是 COM 对象列表。
当我尝试将某个虚拟机作为从
获取的参数时vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
喜欢这个
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
它崩溃了。
我的问题:
为什么我没有获得 WMI 对象?
第二个参数明显不对。 MSDN 说它需要
CIM_VirtualSystemSettingData REF SettingData[]作为参数。 WMI 对象是错误的吗?如何获取正确的参数?如何从 COM 对象中检索我需要的信息?
还是我完全走错了路?
谢谢,斯蒂芬妮
【问题讨论】: