开发者

How to tee the output streams of the current PowerShell script?

I have a PowerShell script that outputs to stdout and stderr. I'd like to tee those to a couple log files at the same time.

What's the best way to do this?

A couple things I've considered:

  • Wrap write-error and write-output with a function that does the tee.
    • I don't like this much because (a) I lose my easy ability to just put a value on a line and have it automatically output and (b) I'd have to wrap every place that I'm calling something, including native exe's, that may have output and wrap those as well.
  • Wrap in an outer script that does the tee.
    • This is a little better but now I have the issue of needing to duplicate the param() block from the inner script in the outer script. I could move the param() block entirely but I also want to call the inner script sometimes for testing purposes (i.e. not get the tee). I suppose I could make that an optional behavior in the outer script..

I remember back when I used to write some perl there was a convenient way to redirect all stdout/err output globally, via a hook. Is something like this po开发者_JAVA百科ssible with PowerShell?


Whoops. I should have spent just a couple more minutes with the Googles.

Start-Transcript does this!

http://technet.microsoft.com/en-us/library/dd347721.aspx

..though it does not capture output of exe's, only PowerShell. Here's a good workaround:

https://web.archive.org/web/20111106093956/blog.magenic.com/blogs/daniels/archive/2008/07/14/Output-Issue-with-Transcript-in-Powershell.aspx

Another update: I discovered that Start-Transcript uses the host window buffer width, which is way too narrow when running a scheduled task on the system account or whatever. Here's how to fix that. Add something like this to the top of the script:

try
{
    $host.ui.rawui.buffersize = `
        new-object system.management.automation.host.size `
            200, $host.ui.rawui.buffersize.height
}
catch {}

Change the 200 to whatever width you want for the transcript.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜