0

我一直在尝试使用 WMI 类(使用 C++)来管理 Hyperv 中的虚拟交换机,例如创建、删除、将虚拟网络附加到 VM 等。我能够在 Windows 2008 R2 上完美地完成所有操作。但它们都不能在 Windows 2012 上正常工作。

例如,当我创建一个外部网络时,我在 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 参数是否需要唯一。如果您使用静态名称,则调用可能会因命名冲突而失败。

如果这些都没有帮助,则开始实时检查 Hyper-V WMI 对象。您可以使用 Python 和Tim Golden 为 Python 编写的 WMI 绑定

于 2013-02-12T12:30:01.420 回答