Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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());
        }
Exemple #5
0
        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.");
        }
Exemple #6
0
        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();
            }
        }
Exemple #7
0
        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());
        }
Exemple #8
0
        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();
            }
        }