如何在 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 -> 网络接口列表
希望它也能帮助其他寻找此内容的人。
我有这段代码,它可以显示 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 -> 网络接口列表
希望它也能帮助其他寻找此内容的人。