Kontrolle Hyper-V-VMs mit Python
ich versuche zu schreiben, eine Kontrolle VMs auf einem HyperV-Server mit Python. Ich beginne mit der Verbindung zu dem server HyperV-server läuft auf:
connection = wmi.connect_server(server="servername", namespace=r"root\virtualization", user=r"username", password=r"password")
wmiServerConnection = wmi.WMI(wmi=connection)
Gibt mir ein wmi
Objekt für diese Verbindung.
Für das stoppen und starten einer VM kann ich das einfach verwenden:
#get the wmi object representing the VM
vmSystem = wmiServerConnection.Msvm_ComputerSystem(ElementName="VmName")
#send change request to vm
vmSystem[0].RequestStateChange(3)
Aber vor dem Start einer VM, die ich anwenden möchten, um einen bestimmten snapshot.
Die Klasse Msvm_VirtualSystemManagementService stellt eine Methode - ApplyVirtualSystemSnapshot
/ApplyVirtualSystemSnapshotEx
- für diese. Es braucht die SnapshotSettingData
als parameter, und ich dachte, ich könnte erhalten, dass man mit der GetSummaryInformation
Methode der gleichen Klasse. MSDN sagt diese Methode gibt eine Msvm_SummaryInformation Klasse.
Rufe ich diese Funktion wie folgt:
#get the wmi class object
vmManagement = wmiServerConnection.Msvm_VirtualSystemManagementService()
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107])
Dieser sollte mir den Namen und die snapshot für alle VMs auf dem HyperV-server. Aber alles was ich bekomme ist eine Liste von COM-Objekten.
Wenn ich versuche, eine bestimmte VM als parameter bekommen von
vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
wie diese
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
stürzt es ab.
Meine Fragen:
-
Warum erhalte ich nicht eine WMI-Objekt?
-
Der zweite parameter ist offensichtlich falsch. MSDN sagt, es muss
CIM_VirtualSystemSettingData REF SettingData[]
als parameter. Das WMI-Objekt die falsche? Wie bekomme ich die richtigen parameter? -
Wie kann ich die Informationen abrufen, die ich brauche aus dem COM-Objekt?
Oder bin ich völlig auf dem Holzweg?
Dank, Stefanie
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich habe endlich die Lösung gefunden. Es war viel einfacher, als ich dachte, aber was solls:
1.Mit Ihrem server verbinden und erhalten Sie die WMI-Objekt:
2.Das system-Objekt und-management-service-Objekt:
3.Holen Sie sich die Objekte im Zusammenhang mit der VM:
4.Wenden Sie den snapshot Sie wollen:
Weiteren Dokumentation kann hier gefunden werden:
http://timgolden.me.uk/python/wmi/wmi.html
http://msdn.microsoft.com/en-us/library/cc136986(v=vs. 85).aspx