我有一个项目,我将不得不构建双堆栈虚拟机.我通常使用powershell,但它似乎无法做到这一点.我可能不得不使用C#.我有点生疏,但由于某种原因,这段代码给我一个错误"无法创建抽象类或接口的实例'VMware.Vim.VimClient'".
using System.Text;
using VMware.Vim;
namespace Vimfunctions
{
public class VimFunctions
{
protected VimClient ConnectServer(string viServer, string viUser, string viPassword)
{
**VimClient vClient = new VimClient();**
ServiceContent vimServiceContent = new ServiceContent();
UserSession vimSession = new UserSession();
vClient.Connect("https://" + viServer.Trim() + "/sdk");
vimSession = vClient.Login(viUser, viPassword);
vimServiceContent = vClient.ServiceContent;
return vClient;
}
Run Code Online (Sandbox Code Playgroud)
我添加了对项目的引用.我一定忘了做点什么.
根据https://communities.vmware.com/thread/478700:"要么坚持上面提到的PowerCLI 5.5版本,要么修改代码以使用VimClientImpl类而不是VimClient(现在是一个接口)."
我用过的一个完整的简单例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VMware.Vim;
namespace vSphereCli
{
class Program
{
static void Main(string[] args)
{
VMware.Vim.VimClientImpl c = new VimClientImpl();
ServiceContent sc = c.Connect("https://HOSTNAME/sdk");
UserSession us = c.Login("admin@vsphere.local", "password");
IList<VMware.Vim.EntityViewBase> vms = c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, null, null);
foreach (VMware.Vim.EntityViewBase tmp in vms)
{
VMware.Vim.VirtualMachine vm = (VMware.Vim.VirtualMachine)tmp;
Console.WriteLine((bool)(vm.Guest.GuestState.Equals("running") ? true : false));
Console.WriteLine(vm.Guest.HostName != null ? (string)vm.Guest.HostName : "");
Console.WriteLine("");
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
添加对"C:\ Program Files(x86)\ VMware\Infrastructure\vSphere PowerCLI\VMware.Vim.dll"的引用.更新主机名,密码; 和volia!