如何在VMware上使用C#获取VM的名称,资源民意调查名称,VLAN ID?

时间:2019-04-01 11:13:09

标签: c# vmware powercli

我有此代码,它可以向我显示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。如果使用6.0,则失败:

VimClient c = new VimClient();

遇到错误无法创建接口VimClient实例

我想获取名称,资源池名称,虚拟机的VLAN ID。我可以使用vm.name或vm.Config.name来获取虚拟机的名称,但是我尝试了很多次,却没有资源虚拟机的池名称和VLAN ID

有一个属性:vm.ResourcePool,我得到了“ ResourcePool-resgroup -409”之类的值,我不知道这是什么。

我不知道如何获得VLAN ID

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

1 个答案:

答案 0 :(得分:0)

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

VimClient client = new VimClientImpl();

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

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

一旦有了所有VM的列表,您就可以针对不同的对象类型(包括incl,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->网络接口列表

希望它也可以帮助其他人。