Example #1
0
 internal static RegistryKey GetVersionRootKey(RegistryKey rootKey, string psVersion)
 {
     using (PSSnapInReader._tracer.TraceMethod())
     {
         string keyForMajorVersion = PSVersionInfo.GetRegisterVersionKeyForMajorVersion(psVersion);
         return(rootKey.OpenSubKey(keyForMajorVersion) ?? throw PSSnapInReader._tracer.NewArgumentException(nameof(psVersion), "MshSnapinInfo", "SpecifiedVersionNotFound", (object)keyForMajorVersion));
     }
 }
Example #2
0
        internal static RegistryKey GetVersionRootKey(RegistryKey rootKey, string psVersion)
        {
            string      registerVersionKeyForSnapinDiscovery = PSVersionInfo.GetRegisterVersionKeyForSnapinDiscovery(psVersion);
            RegistryKey key = rootKey.OpenSubKey(registerVersionKeyForSnapinDiscovery);

            if (key == null)
            {
                throw PSTraceSource.NewArgumentException("psVersion", "MshSnapinInfo", "SpecifiedVersionNotFound", new object[] { registerVersionKeyForSnapinDiscovery });
            }
            return(key);
        }
Example #3
0
        internal static Collection <PSSnapInInfo> ReadAll()
        {
            Collection <PSSnapInInfo> collection = new Collection <PSSnapInInfo>();
            RegistryKey monadRootKey             = GetMonadRootKey();

            string[] subKeyNames = monadRootKey.GetSubKeyNames();
            if (subKeyNames != null)
            {
                Collection <string> collection2 = new Collection <string>();
                foreach (string str in subKeyNames)
                {
                    string registerVersionKeyForSnapinDiscovery = PSVersionInfo.GetRegisterVersionKeyForSnapinDiscovery(str);
                    if (string.IsNullOrEmpty(registerVersionKeyForSnapinDiscovery))
                    {
                        registerVersionKeyForSnapinDiscovery = str;
                    }
                    if (!collection2.Contains(registerVersionKeyForSnapinDiscovery))
                    {
                        collection2.Add(registerVersionKeyForSnapinDiscovery);
                    }
                }
                foreach (string str3 in collection2)
                {
                    if (!string.IsNullOrEmpty(str3) && MeetsVersionFormat(str3))
                    {
                        Collection <PSSnapInInfo> collection3 = null;
                        try
                        {
                            collection3 = ReadAll(monadRootKey, str3);
                        }
                        catch (SecurityException)
                        {
                        }
                        catch (ArgumentException)
                        {
                        }
                        if (collection3 != null)
                        {
                            foreach (PSSnapInInfo info in collection3)
                            {
                                collection.Add(info);
                            }
                        }
                    }
                }
            }
            return(collection);
        }
        internal static PSPrimitiveDictionary CloneAndAddPSVersionTable(PSPrimitiveDictionary originalHash)
        {
            if ((originalHash != null) && originalHash.ContainsKey("PSVersionTable"))
            {
                return((PSPrimitiveDictionary)originalHash.Clone());
            }
            PSPrimitiveDictionary dictionary = originalHash;

            if (originalHash != null)
            {
                dictionary = (PSPrimitiveDictionary)originalHash.Clone();
            }
            else
            {
                dictionary = new PSPrimitiveDictionary();
            }
            PSPrimitiveDictionary dictionary2 = new PSPrimitiveDictionary(PSVersionInfo.GetPSVersionTable());

            dictionary.Add("PSVersionTable", dictionary2);
            return(dictionary);
        }
Example #5
0
        /// <summary>
        /// Add the variables that must always be present in a SessionState instance...
        /// </summary>
        internal void InitializeFixedVariables()
        {
            //
            // BUGBUG
            //
            // String resources for aliases are currently associated with Runspace init
            //

            // $Host
            PSVariable v = new PSVariable(
                SpecialVariables.Host,
                ExecutionContext.EngineHostInterface,
                ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                RunspaceInit.PSHostDescription);

            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $HOME - indicate where a user's home directory is located in the file system.
            //    -- %USERPROFILE% on windows
            //    -- %HOME% on unix
            string home = Environment.GetEnvironmentVariable(Platform.CommonEnvVariableNames.Home) ?? string.Empty;

            v = new PSVariable(SpecialVariables.Home,
                               home,
                               ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope,
                               RunspaceInit.HOMEDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $ExecutionContext
            v = new PSVariable(SpecialVariables.ExecutionContext,
                               ExecutionContext.EngineIntrinsics,
                               ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                               RunspaceInit.ExecutionContextDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PSVersionTable
            v = new PSVariable(SpecialVariables.PSVersionTable,
                               PSVersionInfo.GetPSVersionTable(),
                               ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                               RunspaceInit.PSVersionTableDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PSEdition
            v = new PSVariable(SpecialVariables.PSEdition,
                               PSVersionInfo.PSEditionValue,
                               ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                               RunspaceInit.PSEditionDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PID
            Process currentProcess = Process.GetCurrentProcess();

            v = new PSVariable(
                SpecialVariables.PID,
                currentProcess.Id,
                ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                RunspaceInit.PIDDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PSCulture
            v = new PSCultureVariable();
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PSUICulture
            v = new PSUICultureVariable();
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $?
            v = new QuestionMarkVariable(this.ExecutionContext);
            this.GlobalScope.SetVariableForce(v, this);

            // $ShellId - if there is no runspace config, use the default string
            string shellId = ExecutionContext.ShellID;

            v = new PSVariable(SpecialVariables.ShellId, shellId,
                               ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                               RunspaceInit.MshShellIdDescription);
            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);

            // $PSHOME
            // This depends on the shellId. If we cannot read the application base
            // registry key, set the variable to empty string
            string applicationBase = "";

            try
            {
                applicationBase = Utils.GetApplicationBase(shellId);
            }
            catch (SecurityException)
            {
            }
            v = new PSVariable(SpecialVariables.PSHome, applicationBase,
                               ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                               RunspaceInit.PSHOMEDescription);

            this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true);
        }