如何在 vmware 上使用 c# 获取 vm 的名称、资源池名称、vlan id?

How to got vm's name,resource poll name,vlan id using c# on vmware?

我有这段代码,它可以显示 vcenter 的虚拟机名称:

using VMware.Vim;

VimClient c = new VimClient();
ServiceContent sc = c.Connect("hostnameOrIpHere");
UserSession us = c.Login("usernameHere", "passwordHere");

IList<VMware.Vim.EntityViewBase> vms = 
c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, null, null);
foreach (VMware.Vim.EntityViewBase tmp in vms)
{
  var vm=(VMware.Vim.VirtualMachine)tmp;
  Console.WriteLine(vm.name);
}

我使用 vmware powercli 5。5.If我使用 6.0,失败:

VimClient c = new VimClient();

无法创建接口 VimClient 实例的错误

我想获取名称,资源池名称,vlan id vm.I 可以使用 vm.name 或 vm.Config.name 获取虚拟机的名称,但我尝试了很多次,无法获取虚拟机的资源池名称和vlan id

有一个 属性:vm.ResourcePool,得到了像 "ResourcePool-resgroup -409" 这样的值,我不知道它是什么。

而且我不知道如何获取 vlan id

你能帮帮我吗?谢谢!我可以使用其他版本的vmware powercli

您通常不创建 VimClient 的实例,而是创建 VimClientImpl() 的实例。

VimClient client = new VimClientImpl();

我过去曾使用以下方法通过以下方式获取 VirtualMachine 对象

List<VirtualMachine> vms = 
c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, null, null).Cast<VirtualMachine>().ToList();

获得所有 VM 的列表后..您可以查找不同对象类型的不同视图,包括 PoolName、VLAN ID 等...

foreach (VirtualMachine vm in vms) {
  Datastore ds = (Datastore)client.GetView(vm.Datastore.First(), null);
  HostSystem host = (HostSystem)client.GetView(vm.Runtime.Host, null);
  ClusterComputeResource cluster = (ClusterComputeResource)client.GetView(host.Parent, null);
  ResourcePool rpool = (ResourcePool)client.GetView(vm.ResourcePool, null);

}

获取 VLAN ID 会有点棘手,因为您的 VM 上可能有任何一种网络接口。我建议检查您必须使用哪种网络接口来查看它,然后查找它的 VLAN ID。由于 VLAN 仅在连接的网络中可用,因此您首先要获取网络(我有 DistributedVirtualPortgroup),然后获取该网络的属性以获取 VLAN ID。

vm.Network -> 网络接口列表

希望它也能帮助其他寻找此内容的人。