Author Posts

June 28, 2016 at 6:10 pm

Has anyone else seen output display out of order in PowerShell 5?

C:\Users> Write-Host "Before"; Get-Service e* | select Status, Name, DisplayName; Write-Host "After"
Before

After
 Status Name        DisplayName
 ------ ----        -----------
Stopped EapHost     Extensible Authentication Protocol
Running EFS         Encrypting File System (EFS)
Running eventlog    Windows Event Log
Running EventSystem COM+ Event System

We noticed this after we upgraded to WMF5. It isn't causing any functional problems per se, but it can definitely confuse some people; scripts that uses Write-Host, Write-Verbose etc. to track the flow of the code could produce some surprising results.

I created a UserVoice bug report with more details (please upvote if you think this needs attention): Bug: Console output appears out of order

June 28, 2016 at 6:15 pm

Try Write-Output instead. Write-Host writes directly to the screen which could cause it to appear before a command that writes to the pipeline (Get-Service), even though it's technically entered after that command.

June 28, 2016 at 6:16 pm

Or, "Never use Write-Host." There are also downsides to putting extraneous stuff into the pipeline, as it can confuse the formatting subsystem.

June 28, 2016 at 6:32 pm

Agreed on not using Write-Host, so let's substitute Write-Verbose – same issue.

The UserVoice post has more details (including some info added by Tim Curwick about timing changes).