Пример #1
0
        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);
        }
Пример #2
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);
        }