protected override async Task InvokeCore(object[] parameters, FunctionInvocationContext context)
        {
            object input = parameters[0];
            string invocationId = context.ExecutionContext.InvocationId.ToString();

            object convertedInput = ConvertInput(input);
            Utility.ApplyBindingData(convertedInput, context.Binder.BindingData);
            Dictionary<string, object> bindingData = context.Binder.BindingData;
            bindingData["InvocationId"] = invocationId;

            Dictionary<string, string> environmentVariables = new Dictionary<string, string>();

            string functionInstanceOutputPath = Path.Combine(Path.GetTempPath(), "Functions", "Binding", invocationId);
            await ProcessInputBindingsAsync(convertedInput, functionInstanceOutputPath, context.Binder, _inputBindings, _outputBindings, bindingData, environmentVariables);

            InitializeEnvironmentVariables(environmentVariables, functionInstanceOutputPath, input, _outputBindings, context.ExecutionContext);

            var userTraceWriter = CreateUserTraceWriter(context.TraceWriter);
            PSDataCollection<ErrorRecord> errors = await InvokePowerShellScript(environmentVariables, userTraceWriter);

            await ProcessOutputBindingsAsync(functionInstanceOutputPath, _outputBindings, input, context.Binder, bindingData);

            ErrorRecord error = errors.FirstOrDefault();
            if (error != null)
            {
                throw new RuntimeException("PowerShell script error", error.Exception, error);
            }
        }
Пример #2
0
        public override async Task Invoke(object[] parameters)
        {
            // TODO: Refactor common code for providers.
            object           input       = parameters[0];
            TraceWriter      traceWriter = (TraceWriter)parameters[1];
            Binder           binder      = (Binder)parameters[2];
            ExecutionContext functionExecutionContext = (ExecutionContext)parameters[3];
            string           invocationId             = functionExecutionContext.InvocationId.ToString();

            FunctionStartedEvent startedEvent = new FunctionStartedEvent(functionExecutionContext.InvocationId, Metadata);

            _metrics.BeginEvent(startedEvent);

            try
            {
                TraceWriter.Info(string.Format("Function started (Id={0})", invocationId));

                object convertedInput = ConvertInput(input);
                ApplyBindingData(convertedInput, binder);
                Dictionary <string, object> bindingData = binder.BindingData;
                bindingData["InvocationId"] = invocationId;

                Dictionary <string, string> environmentVariables = new Dictionary <string, string>();

                string functionInstanceOutputPath = Path.Combine(Path.GetTempPath(), "Functions", "Binding", invocationId);
                await ProcessInputBindingsAsync(convertedInput, functionInstanceOutputPath, binder, _inputBindings, _outputBindings, bindingData, environmentVariables);

                InitializeEnvironmentVariables(environmentVariables, functionInstanceOutputPath, input, _outputBindings, functionExecutionContext);

                PSDataCollection <ErrorRecord> errors = await InvokePowerShellScript(environmentVariables, traceWriter);

                await ProcessOutputBindingsAsync(functionInstanceOutputPath, _outputBindings, input, binder, bindingData);

                if (errors.Any())
                {
                    ErrorRecord error = errors.FirstOrDefault();
                    if (error != null)
                    {
                        throw new RuntimeException("PowerShell script error", error.Exception, error);
                    }
                }
                else
                {
                    TraceWriter.Info(string.Format("Function completed (Success, Id={0})", invocationId));
                }
            }
            catch (Exception)
            {
                startedEvent.Success = false;
                TraceWriter.Error(string.Format("Function completed (Failure, Id={0})", invocationId));
                throw;
            }
            finally
            {
                _metrics.EndEvent(startedEvent);
            }
        }
Пример #3
0
        private void ProcessRemoteDebuggingCommandResults(PSDataCollection <PSObject> output)
        {
            var pobj = output.FirstOrDefault();

            if (pobj != null && pobj.BaseObject is string)
            {
                _debugCommandOutput = (string)pobj.BaseObject;
            }
            else if (pobj != null && pobj.BaseObject is LineBreakpoint)
            {
                LineBreakpoint bp = (LineBreakpoint)pobj.BaseObject;
                if (bp != null)
                {
                    _psBreakpointTable.Add(
                        new PowerShellBreakpointRecord(
                            new PowerShellBreakpoint(bp.Script, bp.Line, bp.Column),
                            bp.Id));
                }
            }
        }