Используя библиотеку VMware.Vim на C#, я пытаюсь добавить виртуальную машину обратно в инвентарь (в VMWare обычно это делается, щелкнув правой кнопкой мыши файл .vmx и выбрав «Добавить в инвентарь»).
Я уже нашел, как удалить виртуальную машину из инвентаря ("UnregisterVM ()"), как добавить в инвентарь из командной оболочки ("New-VM -VMFilePath $ VMXFile -VMHost $ ESXHost -Location $ VMFolder"), но я не смог найти как это сделать с помощью C# и VMware.Vim.
Любая идея?





Мне удалось его найти.
В VMware.Vim в классе «Папка» есть функция «RegisterVM_Task».
Документация VMware: https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.Folder.html#registerVm
Моя имплантация (я уверен, что она не идеальна, и я хотел бы, чтобы меня откорректировали, если потребуется):
public void AddVMToInventory(string vmxFilePath, string vmName, string hostName, string resourcePoolName, string folderName)
{
try
{
// Filter host per host name/IP
var hostFilter = new NameValueCollection { { "name", hostName } };
HostSystem host = ((HostSystem)m_client.FindEntityView(typeof(HostSystem), null, hostFilter, null));
var hostMoRef = ((HostSystem)m_client.FindEntityView(typeof(HostSystem), null, hostFilter, null)).MoRef;
// Filter resource pool per resource pool name and host
var poolFilter = new NameValueCollection { { "name", resourcePoolName }, { "parent", host.Parent.Value } };
var poolMoRef = ((ResourcePool)m_client.FindEntityView(typeof(ResourcePool), null, poolFilter, null)).MoRef;
// Filter folder per EXACT name
var folderFilter = new NameValueCollection { { "name", "^" + folderName + "$" } };
var folder = (Folder)m_client.FindEntityView(typeof(Folder), null, folderFilter, null);
folder.RegisterVM_Task(vmxFilePath, vmName, false, poolMoRef, hostMoRef);
}
catch (Exception ex)
{
throw new Exception(string.Format("Adding VM {0} to host {1} failed due to {2}", vmName, hostName, ex));
}