即時嘗試使用Python在HyperV服務器上編寫控制虛擬機。我開始與連接到服務器的Hyper-V的服務器上運行:使用Python控制Hyper-V虛擬機
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])
這應該給我起的名字和所有虛擬機的Hyper-V的服務器上的快照信息。但我得到的是COM對象列表。
當我嘗試給予一定的VM作爲參數從
vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
得到這樣
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
崩潰。
我的問題:
爲什麼我沒有得到一個WMI對象?
第二個參數顯然是錯誤的。 MSDN表示它需要
CIM_VirtualSystemSettingData REF SettingData[]
作爲參數。 WMI對象是錯誤的嗎?我如何得到正確的參數?如何從COM對象中檢索我需要的信息?
還是我完全在錯誤的軌道上?
謝謝,Stefanie