我目前有一个执行如下的脚本: 。\ script.ps1“param1”“param2”2>& 1 | tee -filePath buildlog.txt
我无法找到执行以下操作的方法..记录到脚本中封装的控制台和文件。 。\ script.ps1“param1”“param2”
这是我尝试做的事情:
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
答案 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