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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With