Using -verbose, only gives linefeed

This topic contains 0 replies, has 1 voice, and was last updated by Profile photo of Forums Archives Forums Archives 5 years, 3 months ago.

  • Author
  • #5140

    by dbishop211 at 2012-09-24 15:31:25

    When I use the -verbose parameter with invoke-sqlcmd and log to a transcript file, the output only contains a linefeed character and no carriage return. When I view the output in Notepad, the output is run into one very, cery long line (it wraps at some point but not sure where). Is it possible to have -verbose output to the transcript file with a [CR][LF] instead of only a [LF].

    by DonJ at 2012-09-24 16:00:19

    That's entirely up to the cmdlet author and/or PowerShell (which is more likely) – there's no way for you to modify that behavior.

    by dbishop211 at 2012-09-25 07:08:27

    If that is so, once I've stopped the trascription, is there some way I can, within my Powershell script process the transcript file and find all occurrances of [LF] that are not preceeded by a [CR] and replace [LF] with [CR][LF]?
    At the same time, I've noticed that the output created by the -verbose parameter of invoke-sqlcmd preceeds the actual text created with "VERBOSE: " (quotes added; e.g. "VERBOSE: Changed database context to 'NC_Extract'."). At the same time I am 'processing' the transcript file, I would like to delete all occurrances of "VERBOSE: ".

    Can this be done easily?

    by DonJ at 2012-09-25 07:27:45

    Sure. `n is the CRLF character; read about_escape* in the shell's help to find just LF or CR. Use -replace.

    And to get rid of VERBOSE, you'd do the same thing. Use the -replace operator.

    by poshoholic at 2012-09-25 08:15:21

    Dealing with different line termination character sequences is a pain. I routinely use something like this (with shorter variable names) in many PowerShell scripts I write:
    $stringWithConsistentAndCorrectLineTerminationSequences = $stringWithMixedOrIncorrectLineTerminationSequences -replace "`r`n|`r|`n",[System.Environment]]

    by dbishop211 at 2012-09-26 06:21:51

    Sorry to keep asking, but how would I go about 'cleaning up' a file? I suppose I would have to read it in a line at a time, and write it back out to a new file, but this is quite a bit above anything I've done so far with Powershell.
    I am relatively new to Powershell, and although I love what I can do with it, learning it so far has been finding articles on the Internet and piecing them together. I am basically a database developer and using Powershell to control execution of a large number of scripts.

    by DonJ at 2012-09-26 08:10:16

    Something kind of like this:

    ForEach ($line in (Get-Content inputfile.txt) {
    $line -replace "this","that" | Out-File outputfile.txt -append

    You can see how Kirk used the -replace function in his post; I've just provided a simpler example here (replacing "this" with "that") for illustration.

    by dbishop211 at 2012-09-26 09:45:17

    Okay, starting to get there. What I did not mention, and figured I could handle similarly, is that when -verbose is used with invoke-sqlcmd, it prefixes each line of output with "VERBOSE: ", which I also wanted to remove. This is the code I have (actually killing two birds with one stone):

    ForEach ( $line in (Get-Content .\Patient.log) )
    $line -replace "`nVERBOSE:", [Environment]::NewLine | Out-File .\outputfile.txt -append

    When I run this, the output file does have CRLF, but "VERBOSE: " is still in the file (which doesn't make sense to me. What I do know is that the source (and subsquently the output) file is in unicode. Would this make a difference?

    by DonJ at 2012-09-26 09:53:44

    That's because it isn't matching "`nVERBOSE". You're probably going to have to have it just match, "VERBOSE:" to get rid of that.

    by poshoholic at 2012-09-26 19:30:51

    When you call Get-Content, it returns an array of strings, with each string representing a line in the file without any newline characters. That last part is key. I think you're not even getting newline characters in the results from Get-Content. In which case you just want to remove any line that contains nothing but "VERBOSE:" and possibly leading or trailing whitespace. Here's a command that should do that for you.
    Get-Content C:\patient.log | Where-Object {$_ -notmatch '^\s+?VERBOSE]

You must be logged in to reply to this topic.