.ps1脚本中的PowerShell tee-object?

时间:2012-08-29 23:21:12

标签: powershell

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

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

这是我尝试做的事情:

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

2 个答案:

答案 0 :(得分:5)

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

Write-Output 'hello' > foo.txt

相当于:

'hello' > foo.txt

Write-Output将输出发送到stdout流(即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

答案 1 :(得分:1)

我会使用Start-Transcript。唯一需要注意的是,它不会捕获标准输出,只会从Write-Host输出。因此,您只需将旧版命令行应用程序的输出传递给Write-Host

Start-Transcript -Path C:\logs\mylog.log
program.exe | Write-Host