The docs for the "-ReadCount" parameter say: -ReadCount <Int64> Specifies how many lines of content are sent through the pipeline at a time. The default value is 1. A value of 0 (zero) sends all of the content at one time. This parameter does not change the content displayed, but it does affect the time it takes to display the content. As the value of ReadCount increases, the time it takes to return the first line increases, but the total time for the operation decreases. This can make a perceptible difference in very large items. ReadCount *does* change the content -- it changes the return type of Get-Content from a single item to an array. Whythefuck it can't just send however many lines of text through as a string or whatever... or who cares how many you read at a time, but don't change what you send through the pipe? Anyway, it causes this common gotcha/problem: objective: grep-like behaviour, searching a file for a string and returning lines that contain that string. # works as expected, but extremely slow (takes 50-70 times as long as grep): gc somefile.txt | % { if($_ -match "somestring") {write-output $_} } # only takes 4 times as long as grep, but returns many non-matching lines, # because the matching is now per-chunk rather than per line: gc -readcount 1000 somefile.txt | % { if($_ -match "") {write-output $_} } # only takes 4 times as long as grep, works as expected: gc somefile.txt -ReadCount 1000 | foreach-object {$_ -match "somestring"}