API C# получает имя виртуальной машины из MOR
Я могу получить список MOR виртуальной машины, но есть ли способ перевести это на фактические имена виртуальных машин? Я использовал PropertySpec с Traversalspec, чтобы получить MOR виртуальной машины, но как мне преобразовать это в фактические имена. У меня есть, например, "VirtualMachine-15". Я не могу найти способ получить имя.
Я использую vmware.vim.dll.
Ниже приведена часть кода для получения MOR виртуальных машин:
ObjectContent[] objs = pCollector.RetrieveProperties(pFss);
for (int i = 0; i < objs.Length; i++)
{
DynamicProperty[] dps = objs[i].PropSet;
foreach (DynamicProperty d in dps)
{
if (d.Name == "childEntity")
{
ManagedObjectReference[] vmMORs = (ManagedObjectReference[])d.Val;
foreach(ManagedObjectReference vmMOR in vmMORs )
{
listview1.Items.Add(vmMOR);
}
}
}
}
Спасибо
1 ответ
Что бы это ни стоило, у меня просто была похожая проблема, которую я решил после дня проб и ошибок:
VimClientImpl client = new VimClientImpl();
client.Login(vSphereURI, loginID, loginPW);
List<EntityViewBase> vmlist = client.FindEntityViews(typeof(VirtualMachine), null, filter1, null);
List<EntityViewBase> hostlist = client.FindEntityViews(typeof(HostSystem), null, null, null);
foreach (HostSystem host in hostlist)
{
host.UpdateViewData();
Console.WriteLine(@"# Host: " + host.Name + @": ");
for (int i = 0; i < host.Vm.Length; i++)
{
VirtualMachine vm = (VirtualMachine)client.GetView(host.Vm[i], null);
Console.WriteLine(vm.Name);
}
}
foreach (VirtualMachine vm in vmlist)
{
vm.UpdateViewData();
HostSystem host = (HostSystem)client.GetView(vm.Runtime.Host, null);
Console.WriteLine("name: " + vm.Name + " >>lives on>> " + host.Name);
}
В основном мне пришлось передать MOR client.GetView (MOR, null), и я обнаружил, что у меня есть свежий управляемый объект для связанного хоста или vm, в зависимости от перспективы.