如何使用VMWare API获取虚拟机名称?

时间:2013-10-17 15:29:10

标签: c# vmware vix

我正在使用Vestris.VMWareLib API来远程控制ESX 5.0服务器上的VM。我使用VMWareVirtualMachine.Open方法来启动我的虚拟映像。我的代码是用C#编写的。问题是您需要知道数据存储的路径才能启动映像 - 我希望能够在知道VM名称的情况下启动它。有没有办法做到这一点?我在下面列出了我当前的代码。 谢谢,约翰

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()的方法可用于获取VM名称,但我不知道如何使用它。我有什么建议或想法可以做到这一点吗?

谢谢, 约翰

2 个答案:

答案 0 :(得分:1)

commitVMWareTasks将属性“Name”添加到VMWareVirtualMachine类,它取自vmx文件中的“displayName”属性。该属性不在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();
        }
    }
}

我刚测试了上面的内容并且工作正常。

答案 1 :(得分:0)

简化以上答案: 您不需要针对旧提交重新编译源代码。 只需使用下面的方法调用:

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

(我的评论答案没有足够的声誉,对新的评论感到抱歉。)