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 バインディングを使用できます。