0

WMI クラス (C++ を使用) を使用して、作成、削除、VM への仮想ネットワークの接続など、Hyperv で仮想スイッチを管理しようとしています。Windows 2008 R2 ですべてを完全に実行できました。しかし、どれも Windows 2012 では正常に動作しません。

たとえば、externalnetwork を作成するときは、クラス Msvm_VirtualSwitchManagementService のオブジェクトで CreateSwitchPort というメソッドを呼び出します。2k8R2 で動作していますが、失敗を意味する 32768 というパラメーターの戻り値で失敗します。メソッドがエラーを返す理由を誰でも指摘できますか? 問題をデバッグする方法は? 私が与えるべき許可はありますか?その点でどんな助けでも大歓迎です。

――ラーマクリシュナ。

4

1 に答える 1

0

Hyper-V 2012 は以前の WMI API をサポートしており、私はそれをうまく使用しています。Hyper-V 2012 では v2 API が導入されていますが、これは関係ありません。

CreateSwitchPort は非常に簡単な呼び出しです。これは非常に読みやすい Python の例です。Python 呼び出しは、[out] パラメーターが追加されたタプルを返します。

    #Create a port on the vswitch.
    (new_port, ret_val) = switch_svc.CreateSwitchPort(
                                        Name=str(uuid.uuid4()),
                                        FriendlyName=vm_name,
                                        ScopeOfResidence="",
                                        VirtualSwitch=extswitch.path_())

VirtualSwitch パラメーターが有効であることを確認してください。以下に示す WMI クエリを使用して、このオブジェクトを取得します。VirtualSwitch が外部 NIC に接続されていない場合、失敗します。クエリは成功しましたか?

        return self._conn.Msvm_ExternalEthernetPort(IsBound='TRUE')[0]\
        .associators(wmi_result_class='Msvm_SwitchLANEndpoint')[0]\
        .associators(wmi_result_class='Msvm_SwitchPort')[0]\
        .associators(wmi_result_class='Msvm_VirtualSwitch')[0]

次に、name Name パラメータが一意である必要があるかどうかを確認します。静的な名前を使用すると、名前の競合が原因で呼び出しが失敗する可能性があります。

これで問題が解決しない場合は、リアルタイムで Hyper-V WMI オブジェクトの調査を開始します。Python と、 Tim Golden による Python 用の WMI バインディングを使用できます。

于 2013-02-12T12:30:01.420 に答える