Exemplo n.º 1
0
        //key = path, value = PSModuleInfo
        private IEnumerable <KeyValuePair <string, PSModuleInfo> > ScanForModules(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion)
        {
            // two places we search for modules
            // 1. in this assembly's folder, look for all psd1 and psm1 files.
            //
            // 2. modules in the PSMODULEPATH
            //
            // Import each one of those, and check to see if they have a PackageManagementProviders section in their private data

            return(AlternativeModuleScan(request, requiredVersion, minimumVersion, maximumVersion, providerOption).WhereNotNull()
                   .Where(modulePath => File.ReadAllText(modulePath).IndexOf("PackageManagementProviders", StringComparison.OrdinalIgnoreCase) > -1)
                   .SelectMany(each => _powershell.TestModuleManifest(each))
                   .SelectMany(each => GetPackageManagementModules(request, each, requiredVersion, minimumVersion, maximumVersion)));
        }
        //key = path, value = PSModuleInfo
        private IEnumerable <KeyValuePair <string, PSModuleInfo> > ScanForModules(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion)
        {
            // two places we search for modules
            // 1. in this assembly's folder, look for all psd1 and psm1 files.
            //
            // 2. modules in the PSMODULEPATH
            //
            // Import each one of those, and check to see if they have a PackageManagementProviders section in their private data

            var allAvailableModules = _powershell
                                      .Clear()
                                      .AddCommand("Get-Module")
                                      .AddParameter("ListAvailable")
                                      .Invoke <PSModuleInfo>();

            return(allAvailableModules.WhereNotNull()
                   .SelectMany(each => GetPackageManagementModules(request, each, requiredVersion, minimumVersion, maximumVersion)));
        }
Exemplo n.º 3
0
        private IEnumerable<string> AlternativeModuleScan(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion) {

            var psModulePath = Environment.GetEnvironmentVariable("PSModulePath") ?? "";

            IEnumerable<string> paths = psModulePath.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);

            // add assumed paths just in case the environment variable isn't really set.
            try {
#if CORECLR
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", @"WindowsPowerShell\v1.0\Modules"));
#else
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"WindowsPowerShell\v1.0\Modules"));
#endif
            } catch {
                // skip the folder if it's not valid
            }
            try {
#if CORECLR
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetEnvironmentVariable("userprofile"), "documents", @"WindowsPowerShell\Modules"));
#else
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"WindowsPowerShell\Modules"));
#endif
            } catch {
                // skip the folder if it's not valid
            }

            if (!string.IsNullOrWhiteSpace(BaseFolder) && BaseFolder.DirectoryExists()) {
                paths = paths.ConcatSingleItem(BaseFolder);
            }

            var moduleFolders = paths.Distinct(new PathEqualityComparer(PathCompareOption.Full)).Where(each => each.DirectoryExists()).SelectMany(each => Directory.EnumerateDirectories(each).Where(dir => !_exclusionList.Contains(Path.GetFileName(dir))));

            foreach (var module in moduleFolders) {

                var moduleManifest = Path.Combine(module, Path.GetFileName(module) + ".psd1");
                if (File.Exists(moduleManifest)) {
                    //The version check is defered in the GetPackageManagementModules() because we do not know the version without looking into the content.
                    yield return moduleManifest;
                }

                //The following are the cases where there are multiple modules installed on the system. The file folder is the module version.
                var selectedVersions = Directory.EnumerateDirectories(module).Select(dir => new {
                    folder = dir,
                    ver = (FourPartVersion)Path.GetFileName(dir)
                }).Where(each => each.ver > 0L);

                if (requiredVersion != null) {
                    var version = selectedVersions.Where(each => each.ver == (FourPartVersion)requiredVersion).Select(each => each.folder).FirstOrDefault();
                    if (version != null) {
                        var file = Path.Combine(version, Path.GetFileName(Path.GetFileName(module)) + ".psd1");
                        if (File.Exists(file)) {
                            yield return file;
                        }
                    }
                }

                if (minimumVersion != null) {
                    selectedVersions = selectedVersions.Where(each => each.ver >= (FourPartVersion)minimumVersion);

                }
                if (maximumVersion != null) {
                    selectedVersions = selectedVersions.Where(each => each.ver <= (FourPartVersion)maximumVersion);
                }

                var results = (providerOption == PackageManagementService.ProviderOption.AllProvider) ?
                    selectedVersions.Select(version => Path.Combine(version.folder, Path.GetFileName(Path.GetFileName(module)) + ".psd1")).Where(File.Exists) :
                    new[] {
                        selectedVersions.OrderByDescending(each => each.ver)
                            .Select(version => Path.Combine(version.folder, Path.GetFileName(Path.GetFileName(module)) + ".psd1"))
                            .FirstOrDefault(File.Exists)
                    };

                foreach (var result in results.WhereNotNull()) {
                    yield return result;

                }
            }
        }
Exemplo n.º 4
0
        //key = path, value = PSModuleInfo
        private IEnumerable<KeyValuePair<string, PSModuleInfo>> ScanForModules(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion) {

            // two places we search for modules
            // 1. in this assembly's folder, look for all psd1 and psm1 files.
            //
            // 2. modules in the PSMODULEPATH
            //
            // Import each one of those, and check to see if they have a PackageManagementProviders section in their private data

            var allAvailableModules = _powershell
                .Clear()
                .AddCommand("Get-Module")
                .AddParameter("ListAvailable")
                .Invoke<PSModuleInfo>();

            return allAvailableModules.WhereNotNull()
                .SelectMany(each => GetPackageManagementModules(request, each, requiredVersion, minimumVersion, maximumVersion));
        }
Exemplo n.º 5
0
        private IEnumerable <string> AlternativeModuleScan(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion)
        {
            var psModulePath = Environment.GetEnvironmentVariable("PSModulePath") ?? "";

            IEnumerable <string> paths = psModulePath.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            // add assumed paths just in case the environment variable isn't really set.
            try {
#if CORECLR
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", @"WindowsPowerShell\v1.0\Modules"));
#else
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"WindowsPowerShell\v1.0\Modules"));
#endif
            } catch {
                // skip the folder if it's not valid
            }
            try {
#if CORECLR
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetEnvironmentVariable("userprofile"), "documents", @"WindowsPowerShell\Modules"));
#else
                paths = paths.ConcatSingleItem(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"WindowsPowerShell\Modules"));
#endif
            } catch {
                // skip the folder if it's not valid
            }

            if (!string.IsNullOrWhiteSpace(BaseFolder) && BaseFolder.DirectoryExists())
            {
                paths = paths.ConcatSingleItem(BaseFolder);
            }

            var moduleFolders = paths.Distinct(new PathEqualityComparer(PathCompareOption.Full)).Where(each => each.DirectoryExists()).SelectMany(each => Directory.EnumerateDirectories(each).Where(dir => !_exclusionList.Contains(Path.GetFileName(dir))));

            foreach (var module in moduleFolders)
            {
                var moduleManifest = Path.Combine(module, Path.GetFileName(module) + ".psd1");
                if (File.Exists(moduleManifest))
                {
                    //The version check is defered in the GetPackageManagementModules() because we do not know the version without looking into the content.
                    yield return(moduleManifest);
                }

                //The following are the cases where there are multiple modules installed on the system. The file folder is the module version.
                var selectedVersions = Directory.EnumerateDirectories(module).Select(dir => new {
                    folder = dir,
                    ver    = (FourPartVersion)Path.GetFileName(dir)
                }).Where(each => each.ver > 0L);

                if (requiredVersion != null)
                {
                    var version = selectedVersions.Where(each => each.ver == (FourPartVersion)requiredVersion).Select(each => each.folder).FirstOrDefault();
                    if (version != null)
                    {
                        var file = Path.Combine(version, Path.GetFileName(Path.GetFileName(module)) + ".psd1");
                        if (File.Exists(file))
                        {
                            yield return(file);
                        }
                    }
                }

                if (minimumVersion != null)
                {
                    selectedVersions = selectedVersions.Where(each => each.ver >= (FourPartVersion)minimumVersion);
                }
                if (maximumVersion != null)
                {
                    selectedVersions = selectedVersions.Where(each => each.ver <= (FourPartVersion)maximumVersion);
                }

                var results = (providerOption == PackageManagementService.ProviderOption.AllProvider) ?
                              selectedVersions.Select(version => Path.Combine(version.folder, Path.GetFileName(Path.GetFileName(module)) + ".psd1")).Where(File.Exists) :
                              new[] {
                    selectedVersions.OrderByDescending(each => each.ver)
                    .Select(version => Path.Combine(version.folder, Path.GetFileName(Path.GetFileName(module)) + ".psd1"))
                    .FirstOrDefault(File.Exists)
                };

                foreach (var result in results.WhereNotNull())
                {
                    yield return(result);
                }
            }
        }
Exemplo n.º 6
0
        //key = path, value = PSModuleInfo
        private IEnumerable<KeyValuePair<string, PSModuleInfo>> ScanForModules(
            PsRequest request,
            Version requiredVersion,
            Version minimumVersion,
            Version maximumVersion,
            ProviderOption providerOption = ProviderOption.LatestVersion)
        {
            // two places we search for modules
            // 1. in this assembly's folder, look for all psd1 and psm1 files.
            //
            // 2. modules in the PSMODULEPATH
            //
            // Import each one of those, and check to see if they have a PackageManagementProviders section in their private data

            return AlternativeModuleScan(request, requiredVersion, minimumVersion, maximumVersion, providerOption).WhereNotNull()
                .Where(modulePath => File.ReadAllText(modulePath).IndexOf("PackageManagementProviders", StringComparison.OrdinalIgnoreCase) > -1)
                .SelectMany(each => _powershell.TestModuleManifest(each))
                .SelectMany(each => GetPackageManagementModules(request, each, requiredVersion, minimumVersion, maximumVersion));
        }