0

PowerShellスクリプトからの出力をログに記録するためにStart-Transcriptとを使用しています。Stop-Transcript

スクリプトはアプリケーションのインストールを実行しているため$ErrorActionPreference = "Stop"、エラーが発生した場合は実行を停止するためにも使用しています。

これに伴う問題は、エラーが発生した場合、エラーがコンソールに出力される前にトランスクリプトが停止することです。これは、エラーがログファイルに含まれないことを意味します。try...finallyこれは、次のように使用する場合でも当てはまります。

Start-Transcript "$(Split-Path $MyInvocation.MyCommand.Path -Leaf)-$((Get-Date).toUniversalTime().ToString('yyyy-MM-ddTHH-mm-ss')).log"

$ErrorActionPreference = "Stop"

try
{
    Write-Host "various things happening"

    Write-Error "an error"
}
finally
{
    Stop-Transcript
}

このスクリプトの実行によるコンソール出力は次のとおりです。

E:\> .\Testing.ps1
Transcript started, output file is Testing.ps1-2013-02-18T11-39-27.log
various things happening
Transcript stopped, output file is ...
Write-Error : an error
At ...

エラーメッセージがログに含まれるようにするにはどうすればよいですか?

4

2 に答える 2

1

多分これはうまくいくことができます:

Start-Transcript "$(Split-Path $MyInvocation.MyCommand.Path -Leaf)-$((Get-Date).toUniversalTime().ToString('yyyy-MM-ddTHH-mm-ss')).log"    
$ErrorActionPreference = "Stop"
try
{    
  write-host " A million stuff to do..."    
  $a = 1/0    
}

catch [system.exception]
{
   Write-host "Exception String: "+ $($_.Exception.Message)
   Stop-Transcript
} 
 try{
  stop-transcript
}
catch [System.InvalidOperationException]{}
于 2013-02-18T12:13:42.490 に答える
0

これに対する次の解決策が次のように見つかりました。

Start-Transcript "$(Split-Path $MyInvocation.MyCommand.Path -Leaf)-$((Get-Date).toUniversalTime().ToString('yyyy-MM-ddTHH-mm-ss')).log"

$ErrorActionPreference = "Stop"

trap {
    Write-Error $error[0] -ErrorAction Continue
    Stop-Transcript
    exit 1
}

Write-Host "various things happening"
Write-Error "an error"

Stop-Transcript
于 2013-02-18T12:14:05.330 に答える