static void Main(string[] args) { string url = "https://vcenter.sddc-34-199-139-62.vmwarevmc.com"; string username = ""; string password = Environment.GetEnvironmentVariable("VCENTER_PWD"); string datastoreBrowserKey = "datastoreBrowser-datastore-59"; string path = "[WorkloadDatastore] 834dde5e-cbd6-413d-c0f8-122cc9c14f4d/00000000-0000-0000-0000-000000000000"; string searchRegex = "*.vmdk"; var dsbMOR = new ManagedObjectReference { type = "HostDatastoreBrowser", Value = datastoreBrowserKey }; var vim = new VimPortTypeClient( VimPortTypeClient.EndpointConfiguration.VimPort, $"{url}/sdk" ); var _sic = vim.RetrieveServiceContentAsync( new ManagedObjectReference { type = "ServiceInstance", Value = "ServiceInstance" } ).Result; var _props = _sic.propertyCollector; var _session = vim.LoginAsync( _sic.sessionManager, username, password, null ).Result; // search datastore var searchSpec = new HostDatastoreBrowserSearchSpec { matchPattern = new string[] { searchRegex }, }; // var task = vim.SearchDatastore_TaskAsync( var task = vim.SearchDatastoreSubFolders_TaskAsync( dsbMOR, path, searchSpec ).Result; Console.WriteLine($"{task.type} {task.Value}"); Console.WriteLine($"{url}/mob/?moid={task.Value}"); Console.WriteLine(); Console.WriteLine("Sent request, awaiting response..."); Task.Delay(2000).Wait(); var response = vim.RetrievePropertiesAsync( _props, new PropertyFilterSpec[] { new PropertyFilterSpec { propSet = new PropertySpec[] { new PropertySpec { type = "Task", pathSet = new string[] { "info" } } }, objectSet = new ObjectSpec[] { new ObjectSpec { obj = task } } } } ).Result; ObjectContent[] oc = response.returnval; var info = (TaskInfo)oc[0]?.propSet[0]?.val; var results = info?.result as HostDatastoreBrowserSearchResults[]; foreach (var result in results) { foreach (var file in result.file) { Console.WriteLine(result.folderPath, file.path); } } Console.WriteLine("\nDone."); }
public async Task <string[]> GetFiles(string path, bool recursive) { await Connect(); List <string> list = new List <string>(); DatastorePath dsPath = new DatastorePath(path); string oldRoot = ""; string pattern = dsPath.File ?? "*"; RetrievePropertiesResponse response = await _vim.RetrievePropertiesAsync( _props, FilterFactory.DatastoreFilter(_res) ); ObjectContent[] oc = response.returnval; foreach (ObjectContent obj in oc) { ManagedObjectReference dsBrowser = (ManagedObjectReference)obj.propSet[0].val; var capability = obj.propSet[1].val as DatastoreCapability; var summary = obj.propSet[2].val as DatastoreSummary; // if topLevelDirectory not supported (vsan), map from directory name to guid) if ( capability.topLevelDirectoryCreateSupportedSpecified && !capability.topLevelDirectoryCreateSupported && dsPath.TopLevelFolder.HasValue() ) { oldRoot = dsPath.TopLevelFolder; string target = summary.url + oldRoot; if (!_dsnsMap.ContainsKey(target)) { var result = await _vim.ConvertNamespacePathToUuidPathAsync( _dsns, _datacenter, target ); _dsnsMap.Add(target, result.Replace(summary.url, "")); } dsPath.TopLevelFolder = _dsnsMap[target]; // vmcloud sddc errors on Search_Datastore() // so force SearchDatastoreSubFolders() recursive = true; pattern = "*" + Path.GetExtension(dsPath.File); _logger.LogDebug("mapped datastore namespace: " + dsPath.ToString()); } if (summary.name == dsPath.Datastore) { ManagedObjectReference task = null; TaskInfo info = null; var spec = new HostDatastoreBrowserSearchSpec { matchPattern = new string[] { pattern }, }; var results = new List <HostDatastoreBrowserSearchResults>(); if (recursive) { try { task = await _vim.SearchDatastoreSubFolders_TaskAsync( dsBrowser, dsPath.FolderPath, spec ); info = await WaitForVimTask(task); if (info.result != null) { results.AddRange((HostDatastoreBrowserSearchResults[])info.result); } } catch (Exception ex) { _logger.LogError(ex, "error searching datastore."); } } else { task = await _vim.SearchDatastore_TaskAsync( dsBrowser, dsPath.FolderPath, spec ); info = await WaitForVimTask(task); if (info.result != null) { results.Add((HostDatastoreBrowserSearchResults)info.result); } } foreach (HostDatastoreBrowserSearchResults result in results) { if (result != null && result.file != null && result.file.Length > 0) { string fp = result.folderPath; if (oldRoot.HasValue()) { fp = fp.Replace(dsPath.TopLevelFolder, oldRoot); } if (!fp.EndsWith("/")) { fp += "/"; } list.AddRange(result.file.Select(o => fp + o.path)); } } } } return(list.ToArray()); }
public async Task <string[]> GetFiles(string path, bool recursive) { await Connect(); List <string> list = new List <string>(); DatastorePath dsPath = new DatastorePath(path); RetrievePropertiesResponse response = await _vim.RetrievePropertiesAsync( _props, FilterFactory.DatastoreFilter(_res)); ObjectContent[] oc = response.returnval; foreach (ObjectContent obj in oc) { ManagedObjectReference dsBrowser = (ManagedObjectReference)obj.propSet[0].val; string dsName = ((DatastoreSummary)obj.propSet[1].val).name; if (dsName == dsPath.Datastore) { ManagedObjectReference task = null; TaskInfo info = null; HostDatastoreBrowserSearchSpec spec = new HostDatastoreBrowserSearchSpec { matchPattern = new string[] { dsPath.File } }; List <HostDatastoreBrowserSearchResults> results = new List <HostDatastoreBrowserSearchResults>(); if (recursive) { task = await _vim.SearchDatastoreSubFolders_TaskAsync( dsBrowser, dsPath.FolderPath, spec); info = await WaitForVimTask(task); if (info.result != null) { results.AddRange((HostDatastoreBrowserSearchResults[])info.result); } } else { task = await _vim.SearchDatastore_TaskAsync( dsBrowser, dsPath.FolderPath, spec); info = await WaitForVimTask(task); if (info.result != null) { results.Add((HostDatastoreBrowserSearchResults)info.result); } } foreach (HostDatastoreBrowserSearchResults result in results) { if (result != null && result.file != null && result.file.Length > 0) { string fp = result.folderPath; if (!fp.EndsWith("/")) { fp += "/"; } list.AddRange(result.file.Select(o => fp + o.path)); } } } } return(list.ToArray()); }