我一直在尝试使用WMI类(使用C ++)来管理Hyperv中的虚拟交换机,如创建,删除,将虚拟网络连接到VM等。我能够在Windows 2008 R2上完美地完成所有工作。但是它们都没有在Windows 2012上正常运行。
例如,当我创建一个外部网络时,我在类Msvm_VirtualSwitchManagementService的对象上调用一个名为CreateSwitchPort的方法。它在2k8R2上运行,但在参数返回值为32768时失败,这意味着失败。任何人都可以指出为什么该方法返回错误?如何调试问题?我应该给予任何权限吗?我们非常感谢您提供的任何帮助。
- 拉玛克里希
答案 0 :(得分: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参数是否必须是唯一的。如果使用静态名称,则由于命名冲突,调用可能会失败。
如果这些都没有帮助,那么就开始实时检查Hyper-V WMI对象。您可以使用Python和WMI bindings for Python by Tim Golden。