diff --git a/src/System.Management.Automation/engine/hostifaces/History.cs b/src/System.Management.Automation/engine/hostifaces/History.cs index dfeccead58..65caf987e2 100644 --- a/src/System.Management.Automation/engine/hostifaces/History.cs +++ b/src/System.Management.Automation/engine/hostifaces/History.cs @@ -1212,12 +1212,39 @@ namespace Microsoft.PowerShell.Commands { ps.AddScript(commandToInvoke); - ps.AddCommand("out-default"); - ps.Commands.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); + EventHandler debugAdded = delegate(Object sender, DataAddedEventArgs e) { DebugRecord record = (DebugRecord)((PSDataCollection)sender)[e.Index]; WriteDebug(record.Message); }; + EventHandler errorAdded = delegate(Object sender, DataAddedEventArgs e) { ErrorRecord record = (ErrorRecord)((PSDataCollection)sender)[e.Index]; WriteError(record); }; + EventHandler informationAdded = delegate(Object sender, DataAddedEventArgs e) { InformationRecord record = (InformationRecord)((PSDataCollection)sender)[e.Index]; WriteInformation(record); }; + EventHandler progressAdded = delegate(Object sender, DataAddedEventArgs e) { ProgressRecord record = (ProgressRecord)((PSDataCollection)sender)[e.Index]; WriteProgress(record); }; + EventHandler verboseAdded = delegate(Object sender, DataAddedEventArgs e) { VerboseRecord record = (VerboseRecord)((PSDataCollection)sender)[e.Index]; WriteVerbose(record.Message); }; + EventHandler warningAdded = delegate(Object sender, DataAddedEventArgs e) { WarningRecord record = (WarningRecord)((PSDataCollection)sender)[e.Index]; WriteWarning(record.Message); }; - ps.Invoke(); + ps.Streams.Debug.DataAdded += debugAdded; + ps.Streams.Error.DataAdded += errorAdded; + ps.Streams.Information.DataAdded += informationAdded; + ps.Streams.Progress.DataAdded += progressAdded; + ps.Streams.Verbose.DataAdded += verboseAdded; + ps.Streams.Warning.DataAdded += warningAdded; + + try + { + Collection results = ps.Invoke(); + if (results.Count > 0) + { + WriteObject(results, true); + } pipeline.RemoveFromInvokeHistoryEntryList(entry); } + finally + { + ps.Streams.Debug.DataAdded -= debugAdded; + ps.Streams.Error.DataAdded -= errorAdded; + ps.Streams.Information.DataAdded -= informationAdded; + ps.Streams.Progress.DataAdded -= progressAdded; + ps.Streams.Verbose.DataAdded -= verboseAdded; + ps.Streams.Warning.DataAdded -= warningAdded; + } + } } ///