Je tente d'écrire une machine virtuelle de contrôle sur un serveur HyperV en utilisant Python. Je commence par la connexion au serveur le serveur HyperV fonctionne sur:Contrôle des machines virtuelles Hyper-V avec Python
connection = wmi.connect_server(server="servername", namespace=r"root\virtualization", user=r"username", password=r"password")
wmiServerConnection = wmi.WMI(wmi=connection)
Cela me donne un objet wmi
pour cette connexion.
pour arrêter et démarrer une machine virtuelle, je peux simplement utiliser:
#get the wmi object representing the VM
vmSystem = wmiServerConnection.Msvm_ComputerSystem(ElementName="VmName")
#send change request to vm
vmSystem[0].RequestStateChange(3)
Mais avant de commencer une machine virtuelle que je veux appliquer un certain instantané. La classe Msvm_VirtualSystemManagementService fournit une méthode - ApplyVirtualSystemSnapshot
/ApplyVirtualSystemSnapshotEx
- pour cela. Il a besoin du SnapshotSettingData
comme paramètre et j'ai pensé que je pourrais l'obtenir en utilisant la méthode GetSummaryInformation
de la même classe. MSDN indique que cette méthode renvoie une classe Msvm_SummaryInformation.
J'appelle cette fonction comme ceci:
#get the wmi class object
vmManagement = wmiServerConnection.Msvm_VirtualSystemManagementService()
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107])
Cela devrait me donner le nom et les informations de cliché pour toutes les machines virtuelles sur le serveur HyperV. Mais tout ce que j'ai c'est la liste des objets COM.
Lorsque je tente de donner une certaine VM en tant que paramètre obtenu à partir
vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
comme celui-ci
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
il se bloque.
Mes questions:
Pourquoi ne pas obtenir un objet WMI?
Le deuxième paramètre est évidemment faux. MSDN dit qu'il a besoin de
CIM_VirtualSystemSettingData REF SettingData[]
comme paramètre. L'objet WMI est-il incorrect? Comment puis-je obtenir le bon paramètre?Comment puis-je récupérer les informations dont j'ai besoin à partir de l'objet COM?
Ou suis-je totalement sur la mauvaise piste?
Merci, Stefanie