Powershell – Avoid line breaks when using out-file

line-breakspowershell

I'm getting a little frustrated on a little PowerShell script I'm writing.

Basically I loop through text files to check every line against an array of regular expression patterns.
The result gets piped to the out-file cmdlet which appends it to another text file.

Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { 
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 }

My problem is that I can't get out-file to omit those additional line breaks it creates in the file behind $csvpath (three after each line).
I could use .NET framework classes to achieve the same thing but I'd rather stick to pure PowerShell 😉

Any help is greatly appreciated.

Kevin

Best Answer

Keep in mind that Select-String outputs MatchInfo objects and not strings - as is shown by this command:

gci $logdir -r *.txt | gc | select-string $patterns | format-list *

You are asking for an implicit rendering of the MatchInfo object to string before being output to file. For some reason I don't understand, this is causing additional blank lines to be output. You can fix this by specifying that you only want the Line property output to the file e.g.:

gci $logdir -r *.txt | gc | select-string $patterns | %{$_.Line} | 
    Out-File $csvpath -append -width 1000