Пример #1
0
 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;
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
 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;
 }
Пример #4
0
 public object ApplyTo(MethodInvocationInfo invocation)
 {
     return(null);
 }
Пример #5
0
 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;
 }
Пример #7
0
		internal InstanceMethodInvocationJob(CimJobContext jobContext, bool passThru, CimInstance targetInstance, MethodInvocationInfo methodInvocationInfo) : base(jobContext, passThru, targetInstance.ToString(), methodInvocationInfo)
		{
			this.targetInstance = targetInstance;
		}
Пример #8
0
 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);
Пример #12
0
 internal CreateInstanceJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo)
     : base(jobContext, true /* passThru */, GetEmptyInstance(jobContext), methodInvocationInfo)
 {
 }
Пример #13
0
 internal StaticMethodInvocationJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo)
     : base(jobContext, false /* passThru */, jobContext.CmdletizationClassName, methodInvocationInfo)
 {
 }
Пример #14
0
        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);
            }
        }
Пример #15
0
        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);
            }
        }
Пример #16
0
        /// <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&lt;TObjectInstance&gt;.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);
        }
Пример #19
0
		internal StaticMethodInvocationJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo) : base(jobContext, false, jobContext.CmdletizationClassName, methodInvocationInfo)
		{
		}
Пример #20
0
        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;
 }
Пример #22
0
        /// <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();
            }
        }