private StartableJob DoCreateQueryJob(TSession sessionForJob, QueryBuilder query, Action <TSession, TObjectInstance> actionAgainstResults)
        {
            StartableJob queryJob = this.CreateQueryJob(sessionForJob, query);

            if (queryJob != null)
            {
                if (actionAgainstResults != null)
                {
                    queryJob.SuppressOutputForwarding = true;
                }

                bool discardNonPipelineResults = (actionAgainstResults != null) || !this.AsJob.IsPresent;
                HandleJobOutput(
                    queryJob,
                    sessionForJob,
                    discardNonPipelineResults,
                    actionAgainstResults == null
                        ? (Action <PSObject>) null
                        : delegate(PSObject pso)
                {
                    var objectInstance =
                        (TObjectInstance)
                        LanguagePrimitives.ConvertTo(pso, typeof(TObjectInstance),
                                                     CultureInfo.InvariantCulture);
                    actionAgainstResults(sessionForJob, objectInstance);
                });
            }

            return(queryJob);
        }
        /// <summary>
        /// Invokes an instance method in the object model.
        /// </summary>
        /// <param name="objectInstance">The object on which to invoke the method.</param>
        /// <param name="methodInvocationInfo">Method invocation details.</param>
        /// <param name="passThru"><c>true</c> if successful method invocations should emit downstream the <paramref name="objectInstance"/> being operated on.</param>
        public override void ProcessRecord(TObjectInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru)
        {
            if (objectInstance == null)
            {
                throw new ArgumentNullException("objectInstance");
            }
            if (methodInvocationInfo == null)
            {
                throw new ArgumentNullException("methodInvocationInfo");
            }

            foreach (TSession sessionForJob in this.GetSessionsToActAgainst(objectInstance))
            {
                StartableJob childJob = this.DoCreateInstanceMethodInvocationJob(sessionForJob, objectInstance, methodInvocationInfo, passThru, this.AsJob.IsPresent);
                if (childJob != null)
                {
                    if (!this.AsJob.IsPresent)
                    {
                        _parentJob.AddChildJobAndPotentiallyBlock(this.Cmdlet, childJob, ThrottlingJob.ChildJobFlags.None);
                    }
                    else
                    {
                        _parentJob.AddChildJobWithoutBlocking(childJob, ThrottlingJob.ChildJobFlags.None);
                    }
                }
            }
        }
        public override void ProcessRecord(QueryBuilder query, MethodInvocationInfo methodInvocationInfo, bool passThru)
        {
            Action <TSession, TObjectInstance> actionAgainstResults = null;

            this.parentJob.DisableFlowControlForPendingJobsQueue();
            ThrottlingJob   closureOverParentJob = this.parentJob;
            SwitchParameter closureOverAsJob     = this.AsJob;

            foreach (TSession local in this.GetSessionsToActAgainst(query))
            {
                if (actionAgainstResults == null)
                {
                    actionAgainstResults = delegate(TSession sessionForMethodInvocationJob, TObjectInstance objectInstance)
                    {
                        StartableJob childJob = ((SessionBasedCmdletAdapter <TObjectInstance, TSession>) this).DoCreateInstanceMethodInvocationJob(sessionForMethodInvocationJob, objectInstance, methodInvocationInfo, passThru, closureOverAsJob.IsPresent);
                        if (childJob != null)
                        {
                            closureOverParentJob.AddChildJobAndPotentiallyBlock(childJob, ThrottlingJob.ChildJobFlags.None);
                        }
                    };
                }
                StartableJob job = this.DoCreateQueryJob(local, query, actionAgainstResults);
                if (job != null)
                {
                    if (!this.AsJob.IsPresent)
                    {
                        this.parentJob.AddChildJobAndPotentiallyBlock(base.Cmdlet, job, ThrottlingJob.ChildJobFlags.CreatesChildJobs);
                    }
                    else
                    {
                        this.parentJob.AddChildJobWithoutBlocking(job, ThrottlingJob.ChildJobFlags.CreatesChildJobs, null);
                    }
                }
            }
        }
Example #4
0
        /// <summary>
        /// Creates a <see cref="System.Management.Automation.Job"/> object that performs a query against the wrapped object model.
        /// </summary>
        /// <param name="session">Remote session to query</param>
        /// <param name="baseQuery">Query parameters</param>
        /// <returns><see cref="System.Management.Automation.Job"/> object that performs a query against the wrapped object model</returns>
        internal override StartableJob CreateQueryJob(CimSession session, QueryBuilder baseQuery)
        {
            CimQuery query = baseQuery as CimQuery;

            if (query == null)
            {
                throw new ArgumentNullException("baseQuery");
            }

            TerminatingErrorTracker tracker = TerminatingErrorTracker.GetTracker(this.CmdletInvocationInfo, isStaticCmdlet: false);

            if (tracker.IsSessionTerminated(session))
            {
                return(null);
            }

            if (!IsSupportedSession(session, tracker))
            {
                return(null);
            }

            CimJobContext jobContext = this.CreateJobContext(session, targetObject: null);
            StartableJob  queryJob   = query.GetQueryJob(jobContext);

            return(queryJob);
        }
Example #5
0
        internal override StartableJob CreateQueryJob(CimSession session, QueryBuilder baseQuery)
        {
            CimQuery cimQuery = baseQuery as CimQuery;

            if (cimQuery != null)
            {
                TerminatingErrorTracker tracker = TerminatingErrorTracker.GetTracker(this.CmdletInvocationInfo, false);
                if (!tracker.IsSessionTerminated(session))
                {
                    if (this.IsSupportedSession(session, tracker))
                    {
                        CimJobContext cimJobContext = this.CreateJobContext(session, null);
                        StartableJob  queryJob      = cimQuery.GetQueryJob(cimJobContext);
                        return(queryJob);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                throw new ArgumentNullException("baseQuery");
            }
        }
        private StartableJob DoCreateStaticMethodInvocationJob(TSession sessionForJob, MethodInvocationInfo methodInvocationInfo)
        {
            StartableJob job = this.CreateStaticMethodInvocationJob(sessionForJob, methodInvocationInfo);

            if (job != null)
            {
                bool discardNonPipelineResults = !this.AsJob.IsPresent;
                this.HandleJobOutput(job, sessionForJob, discardNonPipelineResults, null);
            }
            return(job);
        }
        private StartableJob DoCreateInstanceMethodInvocationJob(TSession sessionForJob, TObjectInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru, bool asJob)
        {
            StartableJob job = this.CreateInstanceMethodInvocationJob(sessionForJob, objectInstance, methodInvocationInfo, passThru);

            if (job != null)
            {
                bool discardNonPipelineResults = !asJob;
                this.HandleJobOutput(job, sessionForJob, discardNonPipelineResults, null);
            }
            return(job);
        }
 /// <summary>
 /// Queries for object instances in the object model.
 /// </summary>
 /// <param name="query">Query parameters.</param>
 /// <returns>A lazy evaluated collection of object instances.</returns>
 public override void ProcessRecord(QueryBuilder query)
 {
     _parentJob.DisableFlowControlForPendingCmdletActionsQueue();
     foreach (TSession sessionForJob in this.GetSessionsToActAgainst(query))
     {
         StartableJob childJob = this.DoCreateQueryJob(sessionForJob, query, actionAgainstResults: null);
         if (childJob != null)
         {
             if (!this.AsJob.IsPresent)
             {
                 _parentJob.AddChildJobAndPotentiallyBlock(this.Cmdlet, childJob, ThrottlingJob.ChildJobFlags.None);
             }
             else
             {
                 _parentJob.AddChildJobWithoutBlocking(childJob, ThrottlingJob.ChildJobFlags.None);
             }
         }
     }
 }
        /// <summary>
        /// Invokes a static method in the object model.
        /// </summary>
        /// <param name="methodInvocationInfo">Method invocation details</param>
        public override void ProcessRecord(MethodInvocationInfo methodInvocationInfo)
        {
            if (methodInvocationInfo == null) throw new ArgumentNullException("methodInvocationInfo");

            foreach (TSession sessionForJob in this.GetSessionsToActAgainst(methodInvocationInfo))
            {
                StartableJob childJob = this.DoCreateStaticMethodInvocationJob(sessionForJob, methodInvocationInfo);
                if (childJob != null)
                {
                    if (!this.AsJob.IsPresent)
                    {
                        _parentJob.AddChildJobAndPotentiallyBlock(this.Cmdlet, childJob, ThrottlingJob.ChildJobFlags.None);
                    }
                    else
                    {
                        _parentJob.AddChildJobWithoutBlocking(childJob, ThrottlingJob.ChildJobFlags.None);
                    }
                }
            }
        }
        /// <summary>
        /// Queries for instance and invokes an instance method.
        /// </summary>
        /// <param name="query">Query parameters.</param>
        /// <param name="methodInvocationInfo">Method invocation details.</param>
        /// <param name="passThru"><c>true</c> if successful method invocations should emit downstream the object instance being operated on.</param>
        public override void ProcessRecord(QueryBuilder query, MethodInvocationInfo methodInvocationInfo, bool passThru)
        {
            _parentJob.DisableFlowControlForPendingJobsQueue();

            ThrottlingJob   closureOverParentJob = _parentJob;
            SwitchParameter closureOverAsJob     = this.AsJob;

            foreach (TSession sessionForJob in this.GetSessionsToActAgainst(query))
            {
                StartableJob queryJob = this.DoCreateQueryJob(
                    sessionForJob,
                    query,
                    delegate(TSession sessionForMethodInvocationJob, TObjectInstance objectInstance)
                {
                    StartableJob methodInvocationJob = this.DoCreateInstanceMethodInvocationJob(
                        sessionForMethodInvocationJob,
                        objectInstance,
                        methodInvocationInfo,
                        passThru,
                        closureOverAsJob.IsPresent);

                    if (methodInvocationJob != null)
                    {
                        closureOverParentJob.AddChildJobAndPotentiallyBlock(methodInvocationJob, ThrottlingJob.ChildJobFlags.None);
                    }
                });

                if (queryJob != null)
                {
                    if (!this.AsJob.IsPresent)
                    {
                        _parentJob.AddChildJobAndPotentiallyBlock(this.Cmdlet, queryJob, ThrottlingJob.ChildJobFlags.CreatesChildJobs);
                    }
                    else
                    {
                        _parentJob.AddChildJobWithoutBlocking(queryJob, ThrottlingJob.ChildJobFlags.CreatesChildJobs);
                    }
                }
            }
        }
        private StartableJob DoCreateQueryJob(TSession sessionForJob, QueryBuilder query, Action <TSession, TObjectInstance> actionAgainstResults)
        {
            Action <PSObject> action = null;
            StartableJob      job    = this.CreateQueryJob(sessionForJob, query);

            if (job != null)
            {
                if (actionAgainstResults != null)
                {
                    job.SuppressOutputForwarding = true;
                }
                bool discardNonPipelineResults = (actionAgainstResults != null) || !this.AsJob.IsPresent;
                if (actionAgainstResults != null)
                {
                }
                this.HandleJobOutput(job, sessionForJob, discardNonPipelineResults, (action != null) ? null : (action = delegate(PSObject pso)
                {
                    TObjectInstance local = (TObjectInstance)LanguagePrimitives.ConvertTo(pso, typeof(TObjectInstance), CultureInfo.InvariantCulture);
                    actionAgainstResults(sessionForJob, local);
                }));
            }
            return(job);
        }