2

現在、次のように実行されるスクリプトがあります: .\script.ps1 “param1” “param2” 2>&1 | ティー -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出力を stdout ストリーム (つまり 1) に送信します。Write-Error出力をエラー ストリーム (つまり 2) に送信するために使用します。これら 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 に答える