Forwarding progress stream changes from Foreach-Object -Parallel runspaces (#14271)

This commit is contained in:
Staffan Gustafsson
2021-07-31 18:51:03 +05:00
committed by GitHub
parent 1a55208590
commit 1bfa1c36a7
2 changed files with 23 additions and 0 deletions
@@ -68,6 +68,7 @@ namespace System.Management.Automation.PSTasks
_powershell.Streams.Warning.DataAdded += (sender, args) => HandleWarningData();
_powershell.Streams.Verbose.DataAdded += (sender, args) => HandleVerboseData();
_powershell.Streams.Debug.DataAdded += (sender, args) => HandleDebugData();
_powershell.Streams.Progress.DataAdded += (sender, args) => HandleProgressData();
_powershell.Streams.Information.DataAdded += (sender, args) => HandleInformationData();
// State change handler
@@ -132,6 +133,15 @@ namespace System.Management.Automation.PSTasks
}
}
private void HandleProgressData()
{
foreach (var item in _powershell.Streams.Progress.ReadAll())
{
_dataStreamWriter.Add(
new PSStreamObject(PSStreamObjectType.Progress, item));
}
}
#endregion
#region Event handlers
@@ -138,6 +138,19 @@ Describe 'ForEach-Object -Parallel Basic Tests' -Tags 'CI' {
$actualDebug.Message | Should -BeExactly 'Debug!'
}
It 'Verifies progress data streaming' {
$ps = [Powershell]::Create([System.Management.Automation.RunspaceMode]::NewRunspace)
$ps.Commands.AddScript("`$ProgressPreference='Continue'; 1..2 | ForEach-Object -Parallel { Write-Progress -Activity Progress -Status Running }") | Out-Null
$ps.Invoke()
$pr = $ps.Streams.Progress.ReadAll()
$pr.Count | Should -Be 2
$pr[0].Activity | Should -Be Progress
$pr[0].StatusDescription | Should -Be Running
$ps.Dispose()
}
It 'Verifies information data streaming' {
$actualInformation = 1..1 | ForEach-Object -Parallel { Write-Information "Information!" } 6>&1