Пример #1
0
        private void ProcessInstallHelper(string[] pkgNames, VersionRange pkgVersion, bool pkgPrerelease, string[] pkgRepository, PSCredential pkgCredential, InstallPkgParams reqResourceParams)
        {
            var inputNameToInstall = Utils.ProcessNameWildcards(pkgNames, out string[] errorMsgs, out bool nameContainsWildcard);

            if (nameContainsWildcard)
            {
                WriteError(new ErrorRecord(
                               new PSInvalidOperationException("Name with wildcards is not supported for Install-PSResource cmdlet"),
                               "NameContainsWildcard",
                               ErrorCategory.InvalidArgument,
                               this));
                return;
            }

            foreach (string error in errorMsgs)
            {
                WriteError(new ErrorRecord(
                               new PSInvalidOperationException(error),
                               "ErrorFilteringNamesForUnsupportedWildcards",
                               ErrorCategory.InvalidArgument,
                               this));
            }

            // this catches the case where Name wasn't passed in as null or empty,
            // but after filtering out unsupported wildcard names there are no elements left in namesToInstall
            if (inputNameToInstall.Length == 0)
            {
                return;
            }

            if (!ShouldProcess(string.Format("package to install: '{0}'", String.Join(", ", inputNameToInstall))))
            {
                WriteVerbose(string.Format("Install operation cancelled by user for packages: {0}", String.Join(", ", inputNameToInstall)));
                return;
            }

            var installedPkgs = _installHelper.InstallPackages(
                names: pkgNames,
                versionRange: pkgVersion,
                prerelease: pkgPrerelease,
                repository: pkgRepository,
                acceptLicense: AcceptLicense,
                quiet: Quiet,
                reinstall: Reinstall,
                force: false,
                trustRepository: TrustRepository,
                noClobber: NoClobber,
                credential: pkgCredential,
                asNupkg: false,
                includeXML: true,
                skipDependencyCheck: SkipDependencyCheck,
                savePkg: false,
                pathsToInstallPkg: _pathsToInstallPkg);

            if (PassThru)
            {
                foreach (PSResourceInfo pkg in installedPkgs)
                {
                    WriteObject(pkg);
                }
            }
        }
Пример #2
0
        private void RequiredResourceHelper(Hashtable reqResourceHash)
        {
            var pkgNames = reqResourceHash.Keys;

            foreach (string pkgName in pkgNames)
            {
                var pkgParamInfo = reqResourceHash[pkgName];

                // Format should now be a hashtable, whether the original input format was json or hashtable
                if (!(pkgParamInfo is Hashtable pkgInstallInfo))
                {
                    return;
                }

                InstallPkgParams pkgParams = new InstallPkgParams();
                var pkgParamNames          = pkgInstallInfo.Keys;

                PSCredential pkgCredential = Credential;
                foreach (string paramName in pkgParamNames)
                {
                    if (string.Equals(paramName, "credential", StringComparison.InvariantCultureIgnoreCase))
                    {
                        WriteVerbose("Credential specified for required resource");
                        pkgCredential = pkgInstallInfo[paramName] as PSCredential;
                    }

                    pkgParams.SetProperty(paramName, pkgInstallInfo[paramName] as string, out ErrorRecord IncorrectVersionFormat);

                    if (IncorrectVersionFormat != null)
                    {
                        ThrowTerminatingError(IncorrectVersionFormat);
                    }
                }

                if (pkgParams.Scope == ScopeType.AllUsers)
                {
                    _pathsToInstallPkg = Utils.GetAllInstallationPaths(this, pkgParams.Scope);
                }

                VersionRange pkgVersion;
                // If no Version specified, install latest version for the package.
                // Otherwise validate Version can be parsed out successfully.
                if (pkgInstallInfo["version"] == null || string.IsNullOrWhiteSpace(pkgInstallInfo["version"].ToString()))
                {
                    pkgVersion = VersionRange.All;
                }
                else if (!Utils.TryParseVersionOrVersionRange(pkgInstallInfo["version"].ToString(), out pkgVersion))
                {
                    var exMessage = "Argument for Version parameter is not in the proper format.";
                    var ex        = new ArgumentException(exMessage);
                    var IncorrectVersionFormat = new ErrorRecord(ex, "IncorrectVersionFormat", ErrorCategory.InvalidArgument, null);
                    ThrowTerminatingError(IncorrectVersionFormat);
                }

                ProcessInstallHelper(
                    pkgNames: new string[] { pkgName },
                    pkgVersion: pkgVersion,
                    pkgPrerelease: pkgParams.Prerelease,
                    pkgRepository: new string[] { pkgParams.Repository },
                    pkgCredential: pkgCredential,
                    reqResourceParams: pkgParams);
            }
        }