Exemplo n.º 1
0
        public CommandProcessorBase CreateCommandProcessor(Command command)
        {
            string cmdText = command.CommandText;

            CommandInfo commandInfo   = null;
            bool        useLocalScope = command.UseLocalScope;

            if (command.IsScript) //CommandText contains a script block. Parse it
            {
                command.ScriptBlockAst = CommandManager.ParseInput(cmdText);
            }

            //either we parsed something like "& { foo; bar }", or the CommandText was a script and was just parsed
            if (command.ScriptBlockAst != null)
            {
                commandInfo = new ScriptInfo("", command.ScriptBlockAst.GetScriptBlock(),
                                             useLocalScope ? ScopeUsages.NewScope : ScopeUsages.CurrentScope);
            }
            else //otherwise it's a real command (cmdlet, script, function, application)
            {
                commandInfo = FindCommand(cmdText, useLocalScope);
            }
            // make sure we only create a valid command processor if it's a valid command
            commandInfo.Validate();

            switch (commandInfo.CommandType)
            {
            case CommandTypes.Application:
                return(new ApplicationProcessor((ApplicationInfo)commandInfo));

            case CommandTypes.Cmdlet:
                return(new CommandProcessor(commandInfo as CmdletInfo));

            case CommandTypes.Script:
            case CommandTypes.ExternalScript:
            case CommandTypes.Function:
                return(new ScriptBlockProcessor(commandInfo as IScriptBlockInfo, commandInfo));

            default:
                throw new NotImplementedException("Invalid command type");
            }
        }
Exemplo n.º 2
0
 private void AddInitialSessionCommands()
 {
     foreach (SessionStateCommandEntry cmdEntry in _initialSessionState.Commands)
     {
         if (cmdEntry is SessionStateAliasEntry)
         {
             var aliasEntry = (SessionStateAliasEntry)cmdEntry;
             var aliasInfo  = new AliasInfo(aliasEntry.Name, aliasEntry.Definition, aliasEntry.Description,
                                            CommandManager, aliasEntry.Options);
             ExecutionContext.SessionState.Alias.Set(aliasInfo, "global");
         }
         else if (cmdEntry is SessionStateFunctionEntry)
         {
             var funEntry    = (SessionStateFunctionEntry)cmdEntry;
             var scriptBlock = new ScriptBlock(CommandManager.ParseInput(funEntry.Definition));
             var funInfo     = new FunctionInfo(funEntry.Name, scriptBlock, funEntry.Options);
             ExecutionContext.SessionState.Function.Set(funInfo);
         }
     }
 }