internal InstanceMethodInvocationJob(CimJobContext jobContext, bool passThru, CimInstance targetInstance, MethodInvocationInfo methodInvocationInfo) : base( jobContext, passThru, targetInstance.ToString(), methodInvocationInfo) { Dbg.Assert(targetInstance != null, "Caller should verify targetInstance != null"); _targetInstance = targetInstance; }
/// <summary> /// Creates a <see cref="System.Management.Automation.Job"/> object that invokes an instance method in the wrapped object model. /// </summary> /// <param name="session">Remote session to invoke the method in.</param> /// <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> /// <returns></returns> internal override StartableJob CreateInstanceMethodInvocationJob(CimSession session, CimInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru) { 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, objectInstance); Dbg.Assert(objectInstance != null, "Caller should verify objectInstance != null"); StartableJob result; if (methodInvocationInfo.MethodName.Equals(CimCmdletAdapter.DeleteInstance_MethodName, StringComparison.OrdinalIgnoreCase)) { result = new DeleteInstanceJob( jobContext, passThru, objectInstance, methodInvocationInfo); } else if (methodInvocationInfo.MethodName.Equals(CimCmdletAdapter.ModifyInstance_MethodName, StringComparison.OrdinalIgnoreCase)) { result = new ModifyInstanceJob( jobContext, passThru, objectInstance, methodInvocationInfo); } else { result = new InstanceMethodInvocationJob( jobContext, passThru, objectInstance, methodInvocationInfo); } return(result); }
internal ModifyInstanceJob(CimJobContext jobContext, bool passThru, CimInstance managementObject, MethodInvocationInfo methodInvocationInfo) : base(jobContext, passThru, managementObject, methodInvocationInfo) { Dbg.Assert(this.MethodSubject != null, "Caller should verify managementObject != null"); _originalInstance = managementObject; }
public object ApplyTo(MethodInvocationInfo invocation) { return(null); }
internal PropertySettingJob(CimJobContext jobContext, bool passThru, CimInstance objectToModify, MethodInvocationInfo methodInvocationInfo) : base( jobContext, passThru, objectToModify.ToString(), methodInvocationInfo) { }
internal DeleteInstanceJob(CimJobContext jobContext, bool passThru, CimInstance objectToDelete, MethodInvocationInfo methodInvocationInfo) : base( jobContext, passThru, objectToDelete.ToString(), methodInvocationInfo) { Dbg.Assert(objectToDelete != null, "Caller should verify objectToDelete != null"); _objectToDelete = objectToDelete; }
internal InstanceMethodInvocationJob(CimJobContext jobContext, bool passThru, CimInstance targetInstance, MethodInvocationInfo methodInvocationInfo) : base(jobContext, passThru, targetInstance.ToString(), methodInvocationInfo) { this.targetInstance = targetInstance; }
internal ExtrinsicMethodInvocationJob(CimJobContext jobContext, bool passThru, string methodSubject, MethodInvocationInfo methodInvocationInfo) : base(jobContext, passThru, methodSubject, methodInvocationInfo) { }
/// <summary> /// Creates a <see cref="System.Management.Automation.Job"/> object that invokes a static method in the wrapped object model. /// </summary> /// <param name="session">Remote session to invoke the method in.</param> /// <param name="methodInvocationInfo">Method invocation details.</param> /// <remarks> /// <para> /// This method shouldn't do any processing or interact with the remote session. /// Doing so will interfere with ThrottleLimit functionality. /// </para> /// <para> /// <see cref="Job.WriteObject"/> (and other methods returning job results) will block to support throttling and flow-control. /// Implementations of Job instance returned from this method should make sure that implementation-specific flow-control mechanism pauses further processing, /// until calls from <see cref="Job.WriteObject"/> (and other methods returning job results) return. /// </para> /// </remarks> internal abstract StartableJob CreateStaticMethodInvocationJob(TSession session, MethodInvocationInfo methodInvocationInfo);
private StartableJob DoCreateInstanceMethodInvocationJob(TSession sessionForJob, TObjectInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru, bool asJob) { StartableJob methodInvocationJob = this.CreateInstanceMethodInvocationJob(sessionForJob, objectInstance, methodInvocationInfo, passThru); if (methodInvocationJob != null) { bool discardNonPipelineResults = !asJob; HandleJobOutput( methodInvocationJob, sessionForJob, discardNonPipelineResults, outputAction: null); } return(methodInvocationJob); }
/// <summary> /// Creates a <see cref="System.Management.Automation.Job"/> object that invokes an instance method in the wrapped object model. /// </summary> /// <param name="session">Remote session to invoke the method in.</param> /// <param name="objectInstance">The object on which to invoke the method.</param> /// <param name="methodInvocationInfo">Method invocation details.</param> /// <param name="passThru"><see langword="true"/> if successful method invocations should emit downstream the <paramref name="objectInstance"/> being operated on.</param> /// <remarks> /// <para> /// This method shouldn't do any processing or interact with the remote session. /// Doing so will interfere with ThrottleLimit functionality. /// </para> /// <para> /// <see cref="Job.WriteObject"/> (and other methods returning job results) will block to support throttling and flow-control. /// Implementations of Job instance returned from this method should make sure that implementation-specific flow-control mechanism pauses further processing, /// until calls from <see cref="Job.WriteObject"/> (and other methods returning job results) return. /// </para> /// </remarks> internal abstract StartableJob CreateInstanceMethodInvocationJob(TSession session, TObjectInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru);
internal CreateInstanceJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo) : base(jobContext, true /* passThru */, GetEmptyInstance(jobContext), methodInvocationInfo) { }
internal StaticMethodInvocationJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo) : base(jobContext, false /* passThru */, jobContext.CmdletizationClassName, methodInvocationInfo) { }
internal override StartableJob CreateStaticMethodInvocationJob(CimSession session, MethodInvocationInfo methodInvocationInfo) { StartableJob staticMethodInvocationJob; TerminatingErrorTracker tracker = TerminatingErrorTracker.GetTracker(this.CmdletInvocationInfo, true); if (!tracker.IsSessionTerminated(session)) { if (this.IsSupportedSession(session, tracker)) { CimJobContext cimJobContext = this.CreateJobContext(session, null); if (!methodInvocationInfo.MethodName.Equals("cim:CreateInstance", StringComparison.OrdinalIgnoreCase)) { staticMethodInvocationJob = new StaticMethodInvocationJob(cimJobContext, methodInvocationInfo); } else { staticMethodInvocationJob = new CreateInstanceJob(cimJobContext, methodInvocationInfo); } return(staticMethodInvocationJob); } else { return(null); } } else { return(null); } }
internal override StartableJob CreateInstanceMethodInvocationJob(CimSession session, CimInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru) { StartableJob instanceMethodInvocationJob; TerminatingErrorTracker tracker = TerminatingErrorTracker.GetTracker(this.CmdletInvocationInfo, false); if (!tracker.IsSessionTerminated(session)) { if (this.IsSupportedSession(session, tracker)) { CimJobContext cimJobContext = this.CreateJobContext(session, objectInstance); if (!methodInvocationInfo.MethodName.Equals("cim:DeleteInstance", StringComparison.OrdinalIgnoreCase)) { if (!methodInvocationInfo.MethodName.Equals("cim:ModifyInstance", StringComparison.OrdinalIgnoreCase)) { instanceMethodInvocationJob = new InstanceMethodInvocationJob(cimJobContext, passThru, objectInstance, methodInvocationInfo); } else { instanceMethodInvocationJob = new ModifyInstanceJob(cimJobContext, passThru, objectInstance, methodInvocationInfo); } } else { instanceMethodInvocationJob = new DeleteInstanceJob(cimJobContext, passThru, objectInstance, methodInvocationInfo); } return(instanceMethodInvocationJob); } else { return(null); } } else { return(null); } }
/// <summary> /// Creates a <see cref="System.Management.Automation.Job"/> object that invokes a static method /// (of the class named by <see cref="Microsoft.PowerShell.Cmdletization.CmdletAdapter<TObjectInstance>.ClassName"/>) /// in the wrapped object model. /// </summary> /// <param name="session">Remote session to invoke the method in.</param> /// <param name="methodInvocationInfo">Method invocation details.</param> internal override StartableJob CreateStaticMethodInvocationJob(CimSession session, MethodInvocationInfo methodInvocationInfo) { TerminatingErrorTracker tracker = TerminatingErrorTracker.GetTracker(this.CmdletInvocationInfo, isStaticCmdlet: true); if (tracker.IsSessionTerminated(session)) { return(null); } if (!IsSupportedSession(session, tracker)) { return(null); } CimJobContext jobContext = this.CreateJobContext(session, targetObject: null); StartableJob result; if (methodInvocationInfo.MethodName.Equals(CimCmdletAdapter.CreateInstance_MethodName, StringComparison.OrdinalIgnoreCase)) { result = new CreateInstanceJob( jobContext, methodInvocationInfo); } else { result = new StaticMethodInvocationJob( jobContext, methodInvocationInfo); } return(result); }
internal InstanceMethodInvocationJob(CimJobContext jobContext, bool passThru, CimInstance targetInstance, MethodInvocationInfo methodInvocationInfo) : base(jobContext, passThru, targetInstance.ToString(), methodInvocationInfo) { this.targetInstance = targetInstance; }
private StartableJob DoCreateStaticMethodInvocationJob(TSession sessionForJob, MethodInvocationInfo methodInvocationInfo) { StartableJob methodInvocationJob = this.CreateStaticMethodInvocationJob(sessionForJob, methodInvocationInfo); if (methodInvocationJob != null) { bool discardNonPipelineResults = !this.AsJob.IsPresent; HandleJobOutput( methodInvocationJob, sessionForJob, discardNonPipelineResults, outputAction: null); } return(methodInvocationJob); }
internal StaticMethodInvocationJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo) : base(jobContext, false, jobContext.CmdletizationClassName, methodInvocationInfo) { }
internal MethodInvocationJobBase(CimJobContext jobContext, bool passThru, string methodSubject, MethodInvocationInfo methodInvocationInfo) : base(jobContext) { Dbg.Assert(methodInvocationInfo != null, "Caller should verify methodInvocationInfo != null"); Dbg.Assert(methodSubject != null, "Caller should verify methodSubject != null"); _passThru = passThru; MethodSubject = methodSubject; _methodInvocationInfo = methodInvocationInfo; }
internal MethodInvocationJobBase(CimJobContext jobContext, bool passThru, string methodSubject, MethodInvocationInfo methodInvocationInfo) : base(jobContext) { this._passThru = passThru; this._methodSubject = methodSubject; this._methodInvocationInfo = methodInvocationInfo; }
/// <summary> /// This is implementation of all other cmdlets: CUD, actions /// </summary> /// <param name="methodInvocationInfo"></param> public override void ProcessRecord(MethodInvocationInfo methodInvocationInfo) { if (methodInvocationInfo == null) { throw new ArgumentNullException("methodInvocationInfo"); } if (!this.PassInnerException.IsPresent) { string passInnerExceptionKey = "PassInnerException"; if (PrivateData.ContainsKey(passInnerExceptionKey)) { string PassInnerExceptionValue = PrivateData[passInnerExceptionKey]; this.PassInnerException = PassInnerExceptionValue.Equals("True", StringComparison.OrdinalIgnoreCase); } } List <Tuple <string, object> > parameters = new List <Tuple <string, object> >(); string odataId = string.Empty; if (methodInvocationInfo.MethodName.Equals("Delete", StringComparison.OrdinalIgnoreCase)) { MethodParameter parameter = methodInvocationInfo.Parameters[0]; if (parameter.Name.Equals("OdataId", StringComparison.OrdinalIgnoreCase)) { odataId = (string)parameter.Value; } else if (parameter.Name.Equals("Resource", StringComparison.OrdinalIgnoreCase)) { odataId = (string)((System.Management.Automation.PSObject)parameter.Value).Properties["@odata.id"].Value; } } else if (methodInvocationInfo.MethodName.StartsWith("Action", StringComparison.OrdinalIgnoreCase)) { string[] actionParts = methodInvocationInfo.MethodName.Split(':'); string actionName = actionParts[1]; string actionTargetParameterName = string.Empty; foreach (string actionTargetString in PrivateData["ActionTargets"].Split('|')) { if (actionTargetString.StartsWith(actionName, StringComparison.OrdinalIgnoreCase)) { actionTargetParameterName = actionTargetString.Split('=')[1]; } } foreach (MethodParameter parameter in methodInvocationInfo.Parameters) { if (parameter.Name.Equals("OdataId", StringComparison.OrdinalIgnoreCase)) { odataId = (string)parameter.Value; continue; } if (parameter.Name.Equals(actionTargetParameterName, StringComparison.OrdinalIgnoreCase)) { object actions = ((System.Management.Automation.PSObject)parameter.Value).Properties["Actions"].Value; object action = ((System.Management.Automation.PSObject)actions).Properties["#" + actionName].Value; odataId = (string)(((System.Management.Automation.PSObject)action).Properties["target"].Value); continue; } if (parameter.IsValuePresent) { parameters.Add(new Tuple <string, object>(parameter.Name, parameter.Value)); } } } else { foreach (MethodParameter parameter in methodInvocationInfo.Parameters) { if (parameter.Name.Equals("OdataId", StringComparison.OrdinalIgnoreCase)) { odataId = (string)parameter.Value; continue; } if (parameter.IsValuePresent) { parameters.Add(new Tuple <string, object>(parameter.Name, parameter.Value)); } } } string hostUri = GetCustomUriHelper(this.ClassName, this.ConnectionUri, null); UriBuilder uriBuilder = new UriBuilder(hostUri); uriBuilder.Path = odataId; string body = string.Empty; System.Management.Automation.PowerShell ps; switch (methodInvocationInfo.MethodName) { case "Create": body = SerializeParameters(this.Cmdlet, null, parameters, false); ps = CreateCmdlet(this.Cmdlet, null, null, null, body); break; case "Update": body = SerializeParameters(this.Cmdlet, null, parameters, false); ps = UpdateCmdlet(this.Cmdlet, null, null, null, body); break; case "Delete": ps = DeleteCmdlet(this.Cmdlet, null, null); break; default: { if (methodInvocationInfo.MethodName.StartsWith("Action", StringComparison.OrdinalIgnoreCase)) { GetActionCmdlet(this.Cmdlet, uriBuilder.Uri, parameters); return; } else { throw new NotImplementedException(); } } } InvokePSPassStreamsToPSCmdlet(ps, this.Cmdlet, uriBuilder.Uri); if (ps != null) { ps.Dispose(); } }