private async Task <List <string> > GetSubfolderIsos(string exerciseId, string subfolder) { List <string> list = new List <string>(); var dsName = _options.DsName; var baseFolder = _options.BaseFolder; var filepath = $"[{dsName}] {baseFolder}/{exerciseId}/{subfolder}"; var datastore = await GetDatastoreByName(dsName); if (datastore == null) { list.Add($"Datastore {dsName} cannot be found."); return(list); } var dsBrowser = datastore.Browser; ManagedObjectReference task = null; TaskInfo info = null; HostDatastoreBrowserSearchSpec spec = new HostDatastoreBrowserSearchSpec { }; List <HostDatastoreBrowserSearchResults> results = new List <HostDatastoreBrowserSearchResults>(); task = await _client.SearchDatastore_TaskAsync(dsBrowser, filepath, spec); info = await WaitForVimTask(task); if (info.state == TaskInfoState.error) { if (info.error.fault != null && info.error.fault.ToString().Equals("FileNotFound", StringComparison.CurrentCultureIgnoreCase)) { // folder not found, return empty return(list); } throw new Exception(info.error.localizedMessage); } else if (info.result != null) { results.Add((HostDatastoreBrowserSearchResults)info.result); } foreach (HostDatastoreBrowserSearchResults result in results) { if (result != null && result.file != null && result.file.Length > 0) { list.AddRange(result.file.Select(o => result.folderPath + o.path)); } } return(list); }
private HostDatastoreBrowserSearchResults[] GetDatastoreSearchResults(VimClientlContext ctx) { string volumeName = VCService.GetVolumeName(this.Name); HostDatastoreBrowserSearchResults[] browserSearchResultsArray = (HostDatastoreBrowserSearchResults[])null; ManagedObjectReference[] managedObjects = this.GetManagedObjects(new string[1] { "browser" }); HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); searchSpec.matchPattern = new string[1] { "*.vmdk" }; searchSpec.searchCaseInsensitive = true; searchSpec.searchCaseInsensitiveSpecified = true; searchSpec.sortFoldersFirst = true; searchSpec.sortFoldersFirstSpecified = true; searchSpec.searchCaseInsensitiveSpecified = true; searchSpec.details = new FileQueryFlags(); searchSpec.details.fileSize = true; searchSpec.details.fileOwner = false; searchSpec.details.fileType = true; searchSpec.details.fileOwnerSpecified = true; searchSpec.query = new FileQuery[3] { (FileQuery) new FolderFileQuery(), (FileQuery) new VmDiskFileQuery(), new FileQuery() }; Task task = new Task(this.VcService, this.VcService.Service.SearchDatastoreSubFolders_Task(managedObjects[0], volumeName, searchSpec)); string op = "Search Datastore"; VimClientlContext rstate = ctx; task.WaitForResult(op, rstate); string[] properties1 = new string[1] { "info.result" }; Dictionary <string, object> properties2 = task.GetProperties(properties1); if (properties2.ContainsKey("info.result")) { browserSearchResultsArray = (HostDatastoreBrowserSearchResults[])properties2["info.result"]; } return(browserSearchResultsArray); }
private HostDatastoreBrowserSearchResults GetDatastoreSearchResults(string datastorePath, VimClientlContext ctx) { HostDatastoreBrowserSearchResults browserSearchResults = (HostDatastoreBrowserSearchResults)null; ManagedObjectReference[] managedObjects = this.GetManagedObjects(new string[1] { "browser" }); HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); VmDiskFileQuery vmDiskFileQuery = new VmDiskFileQuery(); vmDiskFileQuery.details = new VmDiskFileQueryFlags(); vmDiskFileQuery.details.capacityKb = true; searchSpec.details = new FileQueryFlags(); searchSpec.details.fileSize = true; searchSpec.details.fileOwner = false; searchSpec.details.fileOwner = false; searchSpec.details.fileType = true; searchSpec.details.fileOwnerSpecified = true; searchSpec.query = new FileQuery[2] { (FileQuery) new FolderFileQuery(), (FileQuery)vmDiskFileQuery }; Task task = new Task(this.VcService, this.VcService.Service.SearchDatastore_Task(managedObjects[0], datastorePath, searchSpec)); string op = "Search Datastore"; VimClientlContext rstate = ctx; task.WaitForResult(op, rstate); string[] properties1 = new string[1] { "info.result" }; Dictionary <string, object> properties2 = task.GetProperties(properties1); if (properties2.ContainsKey("info.result")) { browserSearchResults = (HostDatastoreBrowserSearchResults)properties2["info.result"]; } return(browserSearchResults); }
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()); }
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 void GetVirtualDiskFilesForHost() { try { _service = ecb.getConnection().Service; _sic = ecb.getConnection().ServiceContent; ArrayList supportedVersions = VersionUtil.getSupportedVersions(ecb.get_option("url")); ManagedObjectReference hmor = _service.FindByIp(ecb.getConnection().ServiceContent.searchIndex, null, ecb.get_option("hostip"), false); if (hmor == null) { Console.WriteLine("Unable to find host with IP : " + ecb.get_option("hostip") + " in Inventory"); } else { if (VersionUtil.isApiVersionSupported(supportedVersions, "2.5")) { Object[] datastores = getProperties(hmor, new String[] { "datastore" }); Console.WriteLine("Searching The Datastores"); ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[]; foreach (ManagedObjectReference dstore in dstoreArr) { ManagedObjectReference dsBrowser = ecb.getServiceUtil().GetMoRefProp(dstore, "browser"); ObjectContent[] objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" }); DatastoreSummary ds = objary[0].propSet[0].val as DatastoreSummary; String dsName = ds.name; Console.WriteLine(""); Console.WriteLine("Searching The Datastore " + dsName); VmDiskFileQueryFilter vdiskFilter = new VmDiskFileQueryFilter(); String[] type = { "VirtualIDEController" }; vdiskFilter.controllerType = type; Boolean flag = VersionUtil.isApiVersionSupported(supportedVersions, "4.0"); if (flag) { vdiskFilter.thin = true; } VmDiskFileQuery fQuery = new VmDiskFileQuery(); fQuery.filter = vdiskFilter; HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); FileQuery[] arr = { fQuery }; searchSpec.query = arr; //searchSpec.setMatchPattern(matchPattern); ManagedObjectReference taskmor = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec); object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" }, new string[] { "state" }, // info has a property - state for state of the task new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } } ); // Wait till the task completes. if (result[0].Equals(TaskInfoState.success)) { ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" }); TaskInfo tInfo = (TaskInfo)objTaskInfo[0].propSet[0].val;; HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result; int len = searchResult.Length; for (int j = 0; j < len; j++) { HostDatastoreBrowserSearchResults sres = searchResult[j]; FileInfo[] fileArray = sres.file; if (fileArray != null) { for (int z = 0; z < fileArray.Length; z++) { Console.WriteLine("Virtual Disks Files " + fileArray[z].path); } } else { Console.WriteLine("No Thin-provisioned Virtual Disks Files found"); } } } else { Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully"); } } } else { Object[] datastores = getProperties(hmor, new String[] { "datastore" }); Console.WriteLine("Searching The Datastores"); ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[]; foreach (ManagedObjectReference dstore in dstoreArr) { ManagedObjectReference dsBrowser = (ManagedObjectReference) ecb.getServiceUtil().GetMoRefProp(dstore, "browser"); ObjectContent[] objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" }); DatastoreSummary ds = objary[0].propSet[0].val as DatastoreSummary; String dsName = ds.name; Console.WriteLine(""); Console.WriteLine("Searching The Datastore " + dsName); HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); ManagedObjectReference taskmor = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec); object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" }, new string[] { "state" }, // info has a property - state for state of the task new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } } ); // Wait till the task completes. if (result[0].Equals(TaskInfoState.success)) { ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" }); TaskInfo tInfo = (TaskInfo)objTaskInfo[0].propSet[0].val;; HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result; int len = searchResult.Length; for (int j = 0; j < len; j++) { HostDatastoreBrowserSearchResults sres = searchResult[j]; FileInfo[] fileArray = sres.file; for (int z = 0; z < fileArray.Length; z++) { Console.WriteLine("Virtual Disks Files " + fileArray[z].path); } } } else { Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully"); } } } } } catch (Exception e) { ecb.log.LogLine("VirtualDiskFiles : Failed Connect"); throw e; } finally { ecb.log.LogLine("Ended VirtualDiskFiles"); ecb.log.Close(); } }
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()); }
public Dictionary <string, bool> GetVirtualDisksTypes(string folderName, VimClientlContext ctx) { Dictionary <string, bool> dictionary = new Dictionary <string, bool>((IEqualityComparer <string>)StringComparer.CurrentCultureIgnoreCase); try { string datastorePath = VCService.GetVolumeName(this.Name) + folderName; HostDatastoreBrowserSearchResults[] browserSearchResultsArray = (HostDatastoreBrowserSearchResults[])null; ManagedObjectReference[] managedObjects = this.GetManagedObjects(new string[1] { "browser" }); HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); searchSpec.matchPattern = new string[1] { "*.vmdk" }; searchSpec.searchCaseInsensitive = true; searchSpec.searchCaseInsensitiveSpecified = true; searchSpec.sortFoldersFirst = true; searchSpec.sortFoldersFirstSpecified = true; searchSpec.searchCaseInsensitiveSpecified = true; searchSpec.details = new FileQueryFlags(); searchSpec.details.fileOwner = false; searchSpec.details.fileOwnerSpecified = true; searchSpec.details.fileSize = true; searchSpec.details.modification = true; searchSpec.details.fileType = true; VmDiskFileQuery vmDiskFileQuery = new VmDiskFileQuery(); vmDiskFileQuery.details = new VmDiskFileQueryFlags(); vmDiskFileQuery.details.thin = true; vmDiskFileQuery.details.thinSpecified = true; FileQuery fileQuery = new FileQuery(); searchSpec.query = new FileQuery[1] { (FileQuery)vmDiskFileQuery }; Task task = new Task(this._vimService, this._vimService.Service.SearchDatastoreSubFolders_Task(managedObjects[0], datastorePath, searchSpec)); string op = "Browse Datastore"; VimClientlContext rstate = ctx; task.WaitForResult(op, rstate); string[] properties1 = new string[1] { "info.result" }; Dictionary <string, object> properties2 = task.GetProperties(properties1); if (properties2.ContainsKey("info.result")) { browserSearchResultsArray = (HostDatastoreBrowserSearchResults[])properties2["info.result"]; } if (browserSearchResultsArray != null) { if (browserSearchResultsArray.Length != 0) { foreach (HostDatastoreBrowserSearchResults browserSearchResults in browserSearchResultsArray) { List <VmdkFileInfo> vmdkFileInfoList = new List <VmdkFileInfo>(); if (browserSearchResults.file != null) { foreach (VimApi.FileInfo fileInfo in browserSearchResults.file) { if (fileInfo is VmDiskFileInfo && !dictionary.ContainsKey(fileInfo.path)) { dictionary.Add(fileInfo.path, ((VmDiskFileInfo)fileInfo).thin); } } } } } } } catch (Exception ex) { } return(dictionary); }
public void GetVirtualDiskFilesForHost() { try { _service = ecb.getConnection().Service; _sic = ecb.getConnection().ServiceContent; ArrayList supportedVersions = VersionUtil.getSupportedVersions(ecb.get_option("url")); ManagedObjectReference hmor = _service.FindByIp(ecb.getConnection().ServiceContent.searchIndex, null, ecb.get_option("hostip"), false); if (hmor == null) { Console.WriteLine("Unable to find host with IP : " + ecb.get_option("hostip") + " in Inventory"); } else { if (VersionUtil.isApiVersionSupported(supportedVersions, "2.5")) { Object[] datastores = getProperties(hmor, new String[] { "datastore" }); Console.WriteLine("Searching The Datastores"); ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[]; foreach (ManagedObjectReference dstore in dstoreArr) { ManagedObjectReference dsBrowser = ecb.getServiceUtil().GetMoRefProp(dstore, "browser"); ObjectContent[] objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" }); DatastoreSummary ds = objary[0].propSet[0].val as DatastoreSummary; String dsName = ds.name; Console.WriteLine(""); Console.WriteLine("Searching The Datastore " + dsName); VmDiskFileQueryFilter vdiskFilter = new VmDiskFileQueryFilter(); String[] type = { "VirtualIDEController" }; vdiskFilter.controllerType = type; Boolean flag = VersionUtil.isApiVersionSupported(supportedVersions, "4.0"); if (flag) { vdiskFilter.thin = true; } VmDiskFileQuery fQuery = new VmDiskFileQuery(); fQuery.filter = vdiskFilter; HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); FileQuery[] arr = { fQuery }; searchSpec.query = arr; //searchSpec.setMatchPattern(matchPattern); ManagedObjectReference taskmor = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec); object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" }, new string[] { "state" }, // info has a property - state for state of the task new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } } ); // Wait till the task completes. if (result[0].Equals(TaskInfoState.success)) { ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" }); TaskInfo tInfo = (TaskInfo)objTaskInfo[0].propSet[0].val; ; HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result; int len = searchResult.Length; for (int j = 0; j < len; j++) { HostDatastoreBrowserSearchResults sres = searchResult[j]; FileInfo[] fileArray = sres.file; if (fileArray != null) { for (int z = 0; z < fileArray.Length; z++) { Console.WriteLine("Virtual Disks Files " + fileArray[z].path); } } else { Console.WriteLine("No Thin-provisioned Virtual Disks Files found"); } } } else { Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully"); } } } else { Object[] datastores = getProperties(hmor, new String[] { "datastore" }); Console.WriteLine("Searching The Datastores"); ManagedObjectReference[] dstoreArr = datastores[0] as ManagedObjectReference[]; foreach (ManagedObjectReference dstore in dstoreArr) { ManagedObjectReference dsBrowser = (ManagedObjectReference) ecb.getServiceUtil().GetMoRefProp(dstore, "browser"); ObjectContent[] objary = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, dstore, new String[] { "summary" }); DatastoreSummary ds = objary[0].propSet[0].val as DatastoreSummary; String dsName = ds.name; Console.WriteLine(""); Console.WriteLine("Searching The Datastore " + dsName); HostDatastoreBrowserSearchSpec searchSpec = new HostDatastoreBrowserSearchSpec(); ManagedObjectReference taskmor = _service.SearchDatastoreSubFolders_Task(dsBrowser, "[" + dsName + "]", searchSpec); object[] result = ecb.getServiceUtil().WaitForValues(taskmor, new string[] { "info.state", "info.result" }, new string[] { "state" }, // info has a property - state for state of the task new object[][] { new object[] { TaskInfoState.success, TaskInfoState.error } } ); // Wait till the task completes. if (result[0].Equals(TaskInfoState.success)) { ObjectContent[] objTaskInfo = ecb.getServiceUtil().GetObjectProperties(_sic.propertyCollector, taskmor, new String[] { "info" }); TaskInfo tInfo = (TaskInfo)objTaskInfo[0].propSet[0].val; ; HostDatastoreBrowserSearchResults[] searchResult = (HostDatastoreBrowserSearchResults[])tInfo.result; int len = searchResult.Length; for (int j = 0; j < len; j++) { HostDatastoreBrowserSearchResults sres = searchResult[j]; FileInfo[] fileArray = sres.file; for (int z = 0; z < fileArray.Length; z++) { Console.WriteLine("Virtual Disks Files " + fileArray[z].path); } } } else { Console.WriteLine("SearchDatastoreSubFolders Task couldn't be completed successfully"); } } } } } catch (Exception e) { ecb.log.LogLine("VirtualDiskFiles : Failed Connect"); throw e; } finally { ecb.log.LogLine("Ended VirtualDiskFiles"); ecb.log.Close(); } }