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 参数是否需要唯一。如果您使用静态名称,则调用可能会因命名冲突而失败。
如果这些都没有帮助,则开始实时检查 Hyper-V WMI 对象。您可以使用 Python 和Tim Golden 为 Python 编写的 WMI 绑定。