通过 ManagedObjectReference 查询 VMWare?

Query VMWare by ManagedObjectReference?

我正在使用 PowerCLI VMWare.Vim dll,但我在 C# 中使用它。

下面是代码。

VimClient c = new VMware.Vim.VimClientImpl();
ServiceContent sc = c.Connect("");
UserSession us = c.Login("", "");

NameValueCollection filter = new NameValueCollection();
filter.Add("MoRef", "VirtualMachine-vm-12294");

 IList<VMware.Vim.EntityViewBase> vms2 = c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, filter, null);

c.FindEntityViews 引发 InvalidProperty 异常。

我找遍了所有地方,但我仍然不知道如何通过 MoRef 直接查询 vmware 的东西。有帮助吗?

我知道这是一个很长的时间,但这里是问题的答案。

VimClient c = new VMware.Vim.VimClientImpl();
ServiceContent sc = c.Connect("");
UserSession us = c.Login("", "");

NameValueCollection filter = new NameValueCollection();
filter.Add("Id", "vm-12294");

 IList<VMware.Vim.EntityViewBase> vms2 = 
c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, filter, null);

请注意,我们按 "Id" 过滤并从 "VirtualMachine-vm-12294" 的 MoRef 中删除 "VirtualMachine-"。从技术上讲,ID 是 "vm-12294" 并且 "VirtualMachine-vm-12294" 的 MoRef 字符串是类型指示符,而不是实际 ID 的一部分。

谁可能需要它...

你可以使用这个VimClient.GetView方法,见OverloadDefinitions:

VimClient.GetView(VMware.Vim.ManagedObjectReference moRef, string[] properties)

例如:

_vimClient.GetView(new ManagedObjectReference("VirtualMachine-vm-12294"),null);