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); } } } }
/// <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); }
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); }