I've re-written the spaghetti i've been using into more formal functions, enjoy. If you use these make sure you add a reference to vmware.vim.dll and add the following two statements to the top
using System.Collections.Specialized;
using VMware.Vim;
protected VimClient ConnectServer(string viServer, string viUser, string viPassword)
{ VimClient vimClient = new VimClient(); ServiceContent vimServiceContent = new ServiceContent(); UserSession vimSession = new UserSession(); vimClient.Connect("https://" + viServer.Trim() + "/sdk"); vimSession = vimClient.Login(viUser, viPassword); vimServiceContent = vimClient.ServiceContent; return vimClient;
}
protected List<Datacenter> GetDataCenter(VimClient vimClient, string dcName = null)
{ List<Datacenter> lstDatacenters = new List<Datacenter>(); List<EntityViewBase> appDatacenters = new List<EntityViewBase>(); if (dcName == null) { appDatacenters = vimClient.FindEntityViews(typeof(Datacenter), null, null, null); } else { NameValueCollection dcFilter = new NameValueCollection(); dcFilter.Add("name", dcName); appDatacenters = vimClient.FindEntityViews(typeof(Datacenter), null, dcFilter, null); } foreach (EntityViewBase appDatacenter in appDatacenters) { Datacenter thisDatacenter = (Datacenter)appDatacenter; lstDatacenters.Add(thisDatacenter); } return lstDatacenters;
}
protected List<Datastore> GetDataStore(VimClient vimClient, Datacenter selectedDC)
{ List<Datastore> lstDatastores = new List<Datastore>(); List<EntityViewBase> appDatastores = vimClient.FindEntityViews(typeof(Datastore), selectedDC.MoRef, null, null); foreach (EntityViewBase appDatastore in appDatastores) { Datastore thisDatastore = (Datastore)appDatastore; lstDatastores.Add(thisDatastore); } return lstDatastores;
}
protected List<DistributedVirtualPortgroup> GetDVPortGroups(VimClient vimClient, Datacenter selectedDC)
{ List<DistributedVirtualPortgroup> lstPortGroups = new List<DistributedVirtualPortgroup>(); List<EntityViewBase> appPortGroups = vimClient.FindEntityViews(typeof(DistributedVirtualPortgroup), selectedDC.MoRef, null, null); if (appPortGroups != null) { foreach (EntityViewBase appPortGroup in appPortGroups) { DistributedVirtualPortgroup thisPortGroup = (DistributedVirtualPortgroup)appPortGroup; lstPortGroups.Add(thisPortGroup); } return lstPortGroups; } else { return null; }
}
protected List<Network> GetPortGroups(VimClient vimClient, Datacenter selectedDC)
{ List<Network> lstPortGroups = new List<Network>(); List<EntityViewBase> appPortGroups = vimClient.FindEntityViews(typeof(Network), selectedDC.MoRef, null, null); if (appPortGroups != null) { foreach (EntityViewBase appPortGroup in appPortGroups) { Network thisPortGroup = (Network)appPortGroup; lstPortGroups.Add(thisPortGroup); } return lstPortGroups; } else { return null; }
}
protected List<VirtualMachine> GetVirtualMachines(VimClient vimClient, Datacenter selectedDC = null, string vmName = null)
{ List<VirtualMachine> lstVirtualMachines = new List<VirtualMachine>(); NameValueCollection vmFilter = new NameValueCollection(); ManagedObjectReference DcMoRef = new ManagedObjectReference(); if (vmName != null) { vmFilter.Add("name", vmName); } else { vmFilter = null; } if (selectedDC != null) { DcMoRef = selectedDC.MoRef; } else { DcMoRef = null; } List<EntityViewBase> appVirtualMachines = vimClient.FindEntityViews(typeof(VirtualMachine), DcMoRef, vmFilter, null); if (appVirtualMachines != null) { foreach (EntityViewBase appVirtualMachine in appVirtualMachines) { VirtualMachine thisVirtualMachine = (VirtualMachine)appVirtualMachine; lstVirtualMachines.Add(thisVirtualMachine); } return lstVirtualMachines; } else { return null; }
}
protected List<CustomizationSpecInfo> GetCustomizationSpecs(VimClient vimClient)
{ List<CustomizationSpecInfo> lstSpecInfo = new List<CustomizationSpecInfo>(); CustomizationSpecManager specManager = (CustomizationSpecManager)vimClient.GetView(vimClient.ServiceContent.CustomizationSpecManager, null); if (specManager != null) { foreach (CustomizationSpecInfo specInfo in specManager.Info) { lstSpecInfo.Add(specInfo); } return lstSpecInfo; } else { return null; }
}