2014-09-11 10 views
5

Ich habe ein Projekt, bei dem ich zwei gestapelte virtuelle Maschinen erstellen muss. Normalerweise arbeite ich mit Powershell, aber das scheint nicht möglich zu sein. Ich muss möglicherweise C# verwenden. Ich bin ein bisschen eingerostet, aber aus irgendeinem Grund gibt mir dieser Code eine Fehlermeldung "Kann keine Instanz der abstrakten Klasse oder Schnittstelle 'VMware.Vim.VimClient' erstellen".C# kann keine Verbindung zu Vmware herstellen

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

Ich habe den Verweis auf das Projekt hinzugefügt. Ich muss vergessen haben, etwas zu tun.

+1

'VimClient' ist eine abstrakte Klasse, Sie müssen eine Instanz einer anderen Klasse erstellen, die von dieser Klasse erbt. – DavidG

+0

@DavidG, und fügen Sie der Funktion vor dem Aufruf Körper hinzu. :-) –

+1

@DavidG: außer der Tatsache, dass alle Beispiele im Web tatsächlich 'new VimClient();' verwenden. –

Antwort

5

Per https://communities.vmware.com/thread/478700: „entweder Stick mit der PowerCLI-Version 5.5 wie erwähnt oder Ihren Code zu modifizieren, um die VimClientImpl Klasse zu verwenden, anstatt VimClient (die jetzt einer Schnittstelle)“

Ein komplettes einfaches Beispiel I verwendet:

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("[email protected]", "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(); 
     } 
    } 
} 

Fügen Sie einen Verweis auf "C: \ Program Files (x86) \ VMware \ Infrastructure \ vSphere PowerCLI \ VMware.Vim.dll". Aktualisieren Sie den Hostnamen, das Passwort; und volia!

+1

Für Version 6.5 (https://developercenter.vmware.com/web/dp/tool/vsphere_powercli/6.5) befindet sich die Referenzdatei in "C: \ Programme (x86) \ VMware \ Infrastructure \ PowerCLI \ Modules \ VMware". VimAutomation.Core \ VMware.Vim.dll " –