実行中のスクリプトの出力全体(エラーを含む)をコンソールとファイルに同時に書き込もうとしています。私はいくつかの異なるオプションを試しました:
.\MyScript.ps1 | tee -filePath C:\results.txt # only the output to the file
.\MyScript.ps1 2> C:\results.txt # only the errors to the file and not the console
.\MyScript.ps1 > C:\results.txt # only the output to the file and not the console
私は、ファイルを使用して出力/エラーを確認できることを望みました。
編集:
これが私の現在のテストスクリプトです。望ましい結果は、3つすべてのメッセージを表示できることです。
function Test-Error
{
echo "echo"
Write-Warning "warning"
Write-Error "error"
}
Test-Error 2>&1 | tee -filePath c:\results.txt
やってみました:
.\MyScript.ps1 2>&1 | tee -filePath c:\results.txt
2>&1
はあなたが探しているものです
注:この回答は、PowerShell 1.0および2.0でうまく機能しますが、PowerShell 3.0以降では標準出力とエラーのみをキャプチャします。
私は見つけた答えに満足していなかったので、いくつかを混ぜてこれを思いつきました(PowerShell 3.0 +):
$output = try{your_command *>&1}catch{$_}
これにより、your_command
を使用しようとして生成されたすべてのエラーと出力をキャプチャできます。
存在しないコマンドを使用すると、例外をキャッチします。
PS C:\Users\jdgregson> $output = try{your_command *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
your_command : The term 'your_command' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of the
name, or if a path was included, verify that the path is correct and try again.
At line:1 char:15
+ $output = try{your_command 2>&1}catch{$_}
+ ~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (your_command:String) [], Comman
dNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\Users\jdgregson>
既存のコマンドに無効な引数を渡すと、例外をキャッチします。
PS C:\Users\jdgregson> $output = try{cat C:\invalid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
cat : Cannot find path 'C:\invalid-path.txt' because it does not exist.
At line:1 char:15
+ $output = try{cat C:\invalid-path.txt 2>&1}catch{$_}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\invalid-path.txt:String) [Ge
t-Content], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo
ntentCommand
コマンドに問題がなかった場合は、出力をキャッチします。
PS C:\Users\jdgregson> $output = try{cat C:\valid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
this file is really here
あなたの例でも機能します:
PS C:\Users\jdgregson> $output = try{Test-Error *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
echo
WARNING: warning
Test-Error : error
At line:1 char:15
+ $output = try{Test-Error *>&1}catch{$_}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,Test-Error
同じファイルでエラーと結果の両方を取得できませんでした。私のために働いた回避策:
.\MyScript.ps1 2> C:\errors.txt | tee -filePath C:\results.txt
更新:さらに作業を進め、Start-Transcript
およびStop-Transcript
私のモードですべてをキャプチャし、それが機能しました!