2011-02-24 61 views
12

我有很多PowerShell脚本。一个主要的,那个叫其他的孩子。这些PS脚本依次调用Windows CMD脚本,bash脚本和控制台应用程序。所有这些脚本和应用程序将消息写入控制台。例如,PowerShell脚本正在使用Write-Host scriptlet用于此目的。PowerShell:发送控制台输出到文件没有震耳欲聋的控制台输出

问题:如何轻松地将所有此控制台输出重定向(发送)到某个文件,而不是震耳欲聋(取消)此控制台输出?我希望能够从控制台输出中看到发生了什么,并且还有日志文件中的消息历史记录。

谢谢。

+0

如果您打算对输出做些什么,为什么要使用'Write-Host'? 'Write-Host'就是这么做的 - 在主机上写一些东西。那之后它就失控了。不过,你可以实现你自己的主机,但我想这不太有趣。 – Joey 2011-03-07 06:47:26

回答

5

您可以试试Start-TranscriptStop-Transcript。它有一些限制,例如不捕获本机exe输出。 PowerShell会话也是全球性的。

+0

看起来像'Start-Transcript'和'Tee-Object'的组合可以抓取所有的输出,但不幸的是,可以抓到不同的文件。没有简单的方法来合并它们 – Roman 2011-03-02 18:49:55

+0

我也投票赞成Diadistis的回答(Tee-Object),但决定接受Keith的回答。实际上,最终的解决方案包含两个答案的混合体,正如我在之前的评论中提到的那样。两个单独的文件对我的情况实际上并不是什么大问题。 – Roman 2011-03-31 17:54:40

6

可以使用tee相当于PowerShell中的:Tee-Object

PS:serverfault.com和/或superuser.com更适合这样的问题。

+1

我早些时候尝试过Tee-Object,但它没有做到我所期望的。它只保存将那些正在使用'Write-Output'(写入stdout)而不是'Write-Host'写入的输出文件。我不能在PS脚本中将'Write-Host'全部替换为'Write-Output'。另外,Tee-Object忽略错误输出(stderr)。我需要在控制台上看到的所有**输出重定向到文件。而且,理想情况下,没有大写脚本逻辑重写 – Roman 2011-02-24 22:05:43

1

您可能需要编写自定义主机来执行此操作。这不是一件非常难的事,但它确实需要一些托管代码。

+0

谢谢,迈克。但这样的解决方案不适合我的情况。 – Roman 2011-03-31 17:56:43