トップ回答者
外部プログラム(.exe)実行時のエラーメッセージ取得方法

質問
-
お世話になります。
PowerShellにてWindowsのログファイルをLinuxサーバにpscp.exeを使用して転送しております。
エラー時にイベントログに出力したいのでエラーメッセージの取得方法を教えてください。
意図的にLinuxサーバを認識できない環境でエラーを発生させると以下の記述ではPowerShellのプロンプト上には
$global:MSG_ERR = & "${DIR}\pscp.exe" -p -batch ${p_file} "${p_user}@${p_host}:${p_dir}"
----------------------------------------------------
ssh_init: Host does not exist
または
powershell.exe : ssh_init: Host does not exist
発生場所 行:1 文字:11
+ powershell <<<< C:\copy.ps1
+ CategoryInfo : NotSpecified: (ssh_init: Host does not exist:String) []、RemoteException
+ FullyQualifiedErrorId : NativeCommandError
----------------------------------------------------
が表示されますが、$global:MSG_ERR変数にはエラーメッセージがセットされておりませんでした。
ログファイルを圧縮するため以下の処理も実装しておりますが、こちらはエラー発生時に変数にはエラーメッセージがセットされます。
$global:MSG_ERR = & "makecab.exe" ${p_log} ${p_file}
タスクより定時実行しているため、エラーを確認してから再実行を行なっても現象が再現しないため困っております。
よろしくお願い致します。
回答
-
Error出力を食わせたいのであれば、コマンド感覚で 2>1& を後ろにつけてみてもダメでしょうか
【ご参考】
Windows PowerShell 入門(9)-エラー編 http://codezine.jp/article/detail/2811PS C:\> $obj = dir qq Get-ChildItem : パス 'C:\qq' が存在しないため検出できません。 発生場所 行:1 文字:4 + dir <<<< qq + CategoryInfo : ObjectNotFound: (C:\qq:String) [Get-ChildItem]、ItemNotFoun dException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand PS C:\> $obj = dir qq 2>&1 PS C:\> $obj Get-ChildItem : パス 'C:\qq' が存在しないため検出できません。 発生場所 行:1 文字:11 + $obj = dir <<<< qq 2>&1 + CategoryInfo : ObjectNotFound: (C:\qq:String) [Get-ChildItem]、ItemNotFoun dException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
- 編集済み ChukiMVP 2013年7月23日 3:10 表示のズレ
- 回答としてマーク Otto Carius 2013年7月23日 5:32
すべての返信
-
Error出力を食わせたいのであれば、コマンド感覚で 2>1& を後ろにつけてみてもダメでしょうか
【ご参考】
Windows PowerShell 入門(9)-エラー編 http://codezine.jp/article/detail/2811PS C:\> $obj = dir qq Get-ChildItem : パス 'C:\qq' が存在しないため検出できません。 発生場所 行:1 文字:4 + dir <<<< qq + CategoryInfo : ObjectNotFound: (C:\qq:String) [Get-ChildItem]、ItemNotFoun dException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand PS C:\> $obj = dir qq 2>&1 PS C:\> $obj Get-ChildItem : パス 'C:\qq' が存在しないため検出できません。 発生場所 行:1 文字:11 + $obj = dir <<<< qq 2>&1 + CategoryInfo : ObjectNotFound: (C:\qq:String) [Get-ChildItem]、ItemNotFoun dException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
- 編集済み ChukiMVP 2013年7月23日 3:10 表示のズレ
- 回答としてマーク Otto Carius 2013年7月23日 5:32