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

questionAnswers(1)

yourAnswerToTheQuestion