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