I get data loss when calling .NET [Console]::ReadLine()to read the incoming stream in PowerShell.exe. In CMD, run:
> ping localhost | powershell -NonInteractive -NoProfile -C "do {$ line = [Console] :: ReadLine (); ('' + (Get-Date -f 'HH: mm
: ss') + $ line) | Write-Host; } while ($ line -ne $ null) "
23: 56: 45time <1ms
23:56:45
23: 56: 46time <1ms
23:56:46
23: 56: 47time <1ms
23:56:47
23:56:47
Usually, ping localhost from Vista64 looks like this, so the output above is a lot of data:
Pinging WORLNTEC02.bnysecurities.corp.local [:: 1] from :: 1 with 32 bytes of data:
Reply from :: 1: time <1ms
Reply from :: 1: time <1ms
Reply from :: 1: time <1ms
Reply from :: 1: time <1ms
Ping statistics for :: 1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
But using the same API from C # gets all the data sent to the process (excluding some differences in the new line). The code:
namespace ConOutTime {
class Program {
static void Main (string[] args) {
string s;
while ((s = Console.ReadLine ()) != null) {
if (s.Length > 0)
Console.WriteLine("{0:HH:mm:ss} {1}", DateTime.Now, s);
}
}
}
}
Output:
00:44:30 Pinging WORLNTEC02.bnysecurities.corp.local [:: 1] from :: 1 with 32 bytes of data:
00:44:30 Reply from :: 1: time <1ms
00:44:31 Reply from :: 1: time <1ms
00:44:32 Reply from :: 1: time <1ms
00:44:33 Reply from :: 1: time <1ms
00:44:33 Ping statistics for :: 1:
00:44:33 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
00:44:33 Approximate round trip times in milli-seconds:
00:44:33 Minimum = 0ms, Maximum = 0ms, Average = 0ms
, API PowerShell #, StdIn "". PowerShell StdIn, "PowerShell.exe -Command"?