我有此代码,它可以向我显示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
答案 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->网络接口列表
希望它也可以帮助其他人。