【问题标题】:Using System.Management to Query a VMware Server使用 System.Management 查询 VMware 服务器
【发布时间】:2011-05-25 16:29:26
【问题描述】:

总结:使用System.Management;查询WMI时是否可以指定要使用的端口

我在 Linux 下有一个 python 脚本,它使用 WBEM 查询多个 ESXi 服务器上的类,以检查各种子系统上的警告或错误。之前,我单独编写了一个 WPF 应用程序,该应用程序使用 WMI 查询多个 WinTel 框的磁盘消耗等。

我想编写一个新的 WPF 应用程序,该应用程序将执行与脚本相同的功能,并且我认为我可以使用 WMI 来执行此操作。下面是我的测试代码,为简洁起见删除了错误处理,SetOptions 是一个提供用户名和密码的私有函数:

 foreach (string hostname in Properties.Settings.Default.Hosts)
     foreach (string WMIclass in Properties.Settings.Default.Classes)
     {
     ObjectQuery Query = new ObjectQuery("SELECT * FROM " + WMIclass);
     ManagementObjectSearcher mos = GetMos(Query, hostname);
     foreach (ManagementObject mo in mos.Get())
         foreach (PropertyData pdc in mo.Properties)
             Debug.WriteLine(pdc.Name + " \t\t: " + pdc.Value);
     }

private ManagementObjectSearcher GetMos(ObjectQuery Query, string Hostname)
{
     ConnectionOptions Options = SetOptions();
     ManagementScope Scope = new ManagementScope("\\\\" + Hostname + "\\root\\cimv2", Options);
     return new ManagementObjectSearcher(Scope, Query);
}

问题是远程服务器上的 RPC 不可用。我认为这是因为我首先尝试在不是由 ESX 服务器托管的 135 上建立 RPC 调用。我的问题是如何指定端口 5989 或者我可以在 .net 中使用一些简单的东西来执行我需要做的事情。我天真地认为 WMI/WBEM 之间的类结构看起来是一样的,当然可以做到:-/

【问题讨论】:

    标签: c# wmi vmware esx wbem


    【解决方案1】:

    System.Management 只能用于连接到其他运行 WMI 的 Windows 机器,不支持 WBEM。我看到的唯一一个C# WBEM客户端库是http://code.google.com/p/wbemtools/,但是看起来不是很成熟。

    【讨论】:

      【解决方案2】:

      如前所述,.net 中的 WMI 类不支持 WBEM。最后,我围绕 VMware.Vim.dll 编写了一些代码,其中包含一些关于我需要做什么的很好的文档。

      【讨论】:

        猜你喜欢
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多