Kontroluj maszyny wirtualne Hyper-V za pomocą Pythona
Próbuję napisać kontrolne maszyny wirtualne na serwerze HyperV za pomocą Pythona. Zaczynam od połączenia z serwerem, na którym działa serwer HyperV:
connection = wmi.connect_server(server="servername", namespace=r"root\virtualization", user=r"username", password=r"password")
wmiServerConnection = wmi.WMI(wmi=connection)
To mi dajewmi
obiekt dla tego połączenia.
Aby zatrzymać i uruchomić maszynę wirtualną, mogę po prostu użyć:
#get the wmi object representing the VM
vmSystem = wmiServerConnection.Msvm_ComputerSystem(ElementName="VmName")
#send change request to vm
vmSystem[0].RequestStateChange(3)
Ale przed uruchomieniem maszyny wirtualnej chcę zastosować pewną migawkę. Klasa Msvm_VirtualSystemManagementService udostępnia metodę -ApplyVirtualSystemSnapshot
/ApplyVirtualSystemSnapshotEx
- dla tego. PotrzebujeSnapshotSettingData
jako parametr i myślałem, że mogę uzyskać ten za pomocąGetSummaryInformation
metoda tej samej klasy. MSDN mówi, że ta metoda zwraca aMsvm_SummaryInformation klasa.
Nazywam tę funkcję w ten sposób:
#get the wmi class object
vmManagement = wmiServerConnection.Msvm_VirtualSystemManagementService()
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107])
To powinno dać mi nazwę i informacje o migawkach dla wszystkich maszyn wirtualnych na serwerze HyperV. Ale wszystko, co dostaję, to lista obiektów COM.
Kiedy próbuję nadać pewną maszynę wirtualną jako parametr uzyskany z
vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
lubię to
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
rozbija się.
Moje pytania:
Dlaczego nie dostaję obiektu WMI?
Drugi parametr jest oczywiście błędny. MSDN mówi, że potrzebujeCIM_VirtualSystemSettingData REF SettingData[]
jako parametr. Czy obiekt WMI jest niewłaściwy? Jak uzyskać prawidłowy parametr?
Jak mogę pobrać potrzebne informacje z obiektu COM?
Czy jestem całkowicie na złej drodze?
Dzięki, Stefanie