2

我目前有一个执行如下的脚本: .\script.ps1 “param1” “param2” 2>&1 | tee -filePath buildlog.txt

我找不到执行以下操作的方法.. 记录到脚本中封装的控制台和文件。.\script.ps1 “param1” “param2”</p>

这是我的尝试:

powershelltest.ps1

param([string]$paramOne, [string]$paramTwo)

function DoWork()
{
 Write-Host '3'
}

function WriteLogFile()
{
    DoWork
 # The following would not be captured by Start-Transcript & Stop-Transcript
 # program.exe ....
 Write-Host '4'
}

function CollectorFunction()
{
    Write-Host '2'
 WriteLogFile;
    Write-Host '5'
}

Write-Host '1'
CollectorFunction 2>&1 | tee -filePath c:\log.foo
4

2 回答 2

5

如果要写入日志文件,请不要使用Write-Host. 使用Write-Output或根本不使用Write-*,因为Write-Output是默认设置,例如:

Write-Output 'hello' > foo.txt

相当于:

'hello' > foo.txt

Write-Output将输出发送到标准输出流(即 1)。用于Write-Error将输出发送到错误流(即 2)。这两个流可以被重定向。 Write-Host或多或少地直接写入主机 UI,完全绕过输出流。

在 PowerShell V3 中,您还可以重定向以下流:

The Windows PowerShell redirection operators use the following characters
to represent each output type:
  *   All output
  1   Success output
  2   Errors
  3   Warning messages
  4   Verbose output
  5   Debug messages
于 2012-08-30T02:07:41.510 回答
1

我会用Start-Transcript. 唯一需要注意的是,它不捕获标准输出,只捕获来自Write-Host. 因此,您只需将旧命令行应用程序的输出通过管道传输到Write-Host

Start-Transcript -Path C:\logs\mylog.log
program.exe | Write-Host
于 2012-09-04T01:27:56.597 回答