Python を使用して HyperV サーバー上にコントロール VM を書き込もうとしています。HyperV サーバーが実行されているサーバーに接続することから始めます。
connection = wmi.connect_server(server="servername", namespace=r"root\virtualization", user=r"username", password=r"password")
wmiServerConnection = wmi.WMI(wmi=connection)
これによりwmi
、この接続のオブジェクトが得られます。
VM の停止と開始には、次のように簡単に使用できます。
#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])
これにより、HyperV サーバー上のすべての VM の名前とスナップショット情報が得られます。しかし、得られるのは COM オブジェクトのリストだけです。
から取得したパラメーターとして特定の VM を指定しようとすると、
vmSettings = wmiServerConnection.Msvm_VirtualSystemSettingData(ElementName="VmName")
このような
snapshotInfo = vmManagement[0].GetSummaryInformation([1,107], [vmSettings[0]])
クラッシュします。
私の質問:
WMI オブジェクトを取得できないのはなぜですか?
2 番目のパラメーターは明らかに間違っています。MSDN は、パラメータとして必要だと言って
CIM_VirtualSystemSettingData REF SettingData[]
います。WMI オブジェクトが間違っていますか? 正しいパラメーターを取得するにはどうすればよいですか?COM オブジェクトから必要な情報を取得するにはどうすればよいですか?
それとも、私は完全に間違った方向に進んでいますか?
ありがとう、ステファニー