Как получить имя виртуальной машины с помощью VMWare API?

Я использую API Vestris.VMWareLib для удаленного управления своими виртуальными машинами на сервере ESX 5.0. Я использую метод VMWareVirtualMachine.Open для включения моих виртуальных образов. Мой код написан на C#. Проблема в том, что вам нужно знать путь к хранилищу данных, прежде чем вы сможете включить образ - я бы хотел включить его, зная только имя виртуальной машины. Есть ли способ сделать это? Я включил мой текущий код ниже. Спасибо Джон

using Vestris.VMWareLib;

//Works if VM name is in the path but what if it isn't?
List<VMWareVirtualMachine> vitualMachines = esxServer.RegisteredVirtualMachines.ToList();
VMWareVirtualMachine virtualMachine = vitualMachines.Where(vm => vm.PathName.Contains(vmName)).First();
VMWareVirtualMachine virtualMachine = esxServer.Open(vmName);

Есть метод VMWareVirtualMachine.GetProperty(), который можно использовать для получения имени виртуальной машины, но я не знаю, как его использовать. Любые предложения или идеи, как я могу это сделать?

Спасибо Джон

2 ответа

VMWareTasks зафиксировал добавление свойства "Name" к классу VMWareVirtualMachine, оно взято из свойства "displayName" в файле vmx. Это свойство отсутствует в VMWareTasks 1.7, поэтому на данный момент вам нужно будет извлечь исходный код и собрать его самостоятельно.

Используйте его для итерации зарегистрированных гостей, проверки этой переменной и включения соответствующей.

using Vestris.VMWareLib;

private void powerOnVm(string vmName)
{
    using (VMWareVirtualHost esxServer = new VMWareVirtualHost())
    {
        esxServer.ConnectToVMWareVIServer("yourHost", "yourUser", "yourPassword");
        using (VMWareVirtualMachine virtualMachine = esxServer.RegisteredVirtualMachines.FirstOrDefault(vm => vm.Name == vmName))
        {
            if (virtualMachine != null && !virtualMachine.IsRunning)
                virtualMachine.PowerOn();
        }
    }
}

Я только что проверил выше, и это работало нормально.

Чтобы упростить приведенный выше ответ: вам не нужно перекомпилировать исходники против старого коммита. Просто используйте вызов метода ниже:

GetProperty<string>(Constants.VIX_PROPERTY_VM_NAME) instead of vm.Name

(У меня недостаточно репутации, чтобы комментировать ответ, извините за новый).

Другие вопросы по тегам