如何在vmware上使用c#获取虚拟机名称,资源民意调查名称,VLAN ID?

问题描述 投票:1回答:1

我有此代码,它可以向我显示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

c# vmware powercli
1个回答
0
投票

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

VimClient client = new VimClientImpl();

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.