예제 #1
0
        internal PSEventSubscriber(
            ExecutionContext context,
            int id,
            object source,
            string eventName,
            string sourceIdentifier,
            ScriptBlock action,
            bool supportEvent,
            bool forwardEvent)
            : this(context, id, source, eventName, sourceIdentifier, supportEvent, forwardEvent)
        {
            if (action == null)
            {
                return;
            }
            ScriptBlock          boundScriptBlock     = context.Modules.CreateBoundScriptBlock(action, true);
            PSVariable           psVariable           = new PSVariable("script:Error", (object)new ArrayList(), ScopedItemOptions.Constant);
            SessionStateInternal sessionStateInternal = boundScriptBlock.SessionStateInternal;

            sessionStateInternal.GetScopeByID("script").SetVariable(psVariable.Name, (object)psVariable, false, true, sessionStateInternal, CommandOrigin.Internal);
            this.action = new PSEventJob((PSEventManager)context.Events, this, boundScriptBlock, sourceIdentifier);
            if (supportEvent)
            {
                return;
            }
            ((LocalRunspace)context.CurrentRunspace).JobRepository.Add((Job)this.action);
        }
예제 #2
0
        private ScriptBlock CreateBoundScriptBlock(ScriptBlock scriptAction)
        {
            ScriptBlock          block                = this.context.Modules.CreateBoundScriptBlock(this.context, scriptAction, true);
            PSVariable           variable             = new PSVariable("script:Error", new ArrayList(), ScopedItemOptions.Constant);
            SessionStateInternal sessionStateInternal = block.SessionStateInternal;

            sessionStateInternal.GetScopeByID("script").SetVariable(variable.Name, variable, false, true, sessionStateInternal, CommandOrigin.Internal, false);
            return(block);
        }