我正在使用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名称,但我不知道如何使用它。我有什么建议或想法可以做到这一点吗?
谢谢, 约翰
答案 0 :(得分:1)
commit到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();
}
}
}
我刚测试了上面的内容并且工作正常。
答案 1 :(得分:0)
简化以上答案: 您不需要针对旧提交重新编译源代码。 只需使用下面的方法调用:
GetProperty<string>(Constants.VIX_PROPERTY_VM_NAME) instead of vm.Name
(我的评论答案没有足够的声誉,对新的评论感到抱歉。)