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

本文关键字:虚拟机 获取 API 何使用 VMWare | 更新日期: 2023-09-27 18:36:00

我正在使用Vestris.VMWareLib API远程控制ESX 5.0服务器上的VM。我使用 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()的方法可用于获取VM名称,但我不知道如何使用它。有什么建议或想法可以做到这一点吗?

谢谢John

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

有一个提交到 VMWareTasks 将属性"

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();
        }
    }
}

我刚刚测试了上述内容,它工作正常。