static Results RunComand(PSCommand cmds) { Results results = new Results(); try { Runspace rs; rs = RunspaceFactory.CreateRunspace(); rs.Open(); List <ErrorRecord> errors = new List <ErrorRecord>(); Collection <PSObject> retrval = new Collection <PSObject>(); using (PowerShell ps = PowerShell.Create()) { ps.Runspace = rs; ps.Commands = cmds; retrval = ps.Invoke(); PSDataCollection <ErrorRecord> errorRecords = ps.Streams.Error; var errorList = errorRecords.ToList(); results.ObjReturned = retrval; results.Errors = errorList; } } catch (Exception ex) { LogEvents("Error", "RunCommand", ex.ToString()); } return(results); }
private void DebuggerOnDebuggerStop(object sender, DebuggerStopEventArgs args) { Debugger debugger = sender as Debugger; DebuggerResumeAction?resumeAction = null; DebuggingInBreakpoint = true; try { if ( ((ScriptingHostUserInterface)host.UI).CheckSessionCanDoInteractiveAction( nameof(DebuggerOnDebuggerStop), false)) { var output = new PSDataCollection <PSObject>(); output.DataAdded += (dSender, dArgs) => { foreach (var item in output.ReadAll()) { host.UI.WriteLine(item.ToString()); } }; var message = Message.Parse(this, "ise:breakpointhit"); //var position = args.InvocationInfo.DisplayScriptPosition; IScriptExtent position; try { position = args.InvocationInfo.GetType() .GetProperty("ScriptPosition", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty) .GetValue(args.InvocationInfo) as IScriptExtent; } catch (Exception) { position = args.InvocationInfo.DisplayScriptPosition; } if (position != null) { message.Arguments.Add("Line", (position.StartLineNumber - 1).ToString()); message.Arguments.Add("Column", (position.StartColumnNumber - 1).ToString()); message.Arguments.Add("EndLine", (position.EndLineNumber - 1).ToString()); message.Arguments.Add("EndColumn", (position.EndColumnNumber - 1).ToString()); } else { message.Arguments.Add("Line", (args.InvocationInfo.ScriptLineNumber - 1).ToString()); message.Arguments.Add("Column", (args.InvocationInfo.OffsetInLine - 1).ToString()); message.Arguments.Add("EndLine", (args.InvocationInfo.ScriptLineNumber).ToString()); message.Arguments.Add("EndColumn", (0).ToString()); } message.Arguments.Add("HitCount", args.Breakpoints.Count > 0 ? args.Breakpoints[0].HitCount.ToString() : "1"); SendUiMessage(message); while (resumeAction == null && !abortRequested) { if (ImmediateCommand is string commandString) { PowerShellLog.Info($"Executing a debug command in ScriptSession '{Key}'."); PowerShellLog.Debug(commandString); DebuggerCommandResults results = null; try { var psCommand = new PSCommand(); var scriptCommand = new Command(commandString, true) { MergeUnclaimedPreviousCommandResults = PipelineResultTypes.Warning }; psCommand.AddCommand(scriptCommand) .AddCommand(OutDefaultCommand); results = debugger?.ProcessCommand(psCommand, output); ImmediateResults = output; LogErrors(null, output.ToList()); } catch (Exception ex) { PowerShellLog.Error("Error while executing Debugging command.", ex); ImmediateCommand = null; host.UI.WriteErrorLine(GetExceptionString(ex, ExceptionStringFormat.Default)); } if (results?.ResumeAction != null) { resumeAction = results.ResumeAction; } ImmediateCommand = null; } else { Thread.Sleep(20); } } args.ResumeAction = resumeAction ?? DebuggerResumeAction.Continue; } } finally { DebuggingInBreakpoint = false; } }