none
外部プログラム(.exe)実行時のエラーメッセージ取得方法 RRS feed

  • 質問

  • お世話になります。

    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}

    タスクより定時実行しているため、エラーを確認してから再実行を行なっても現象が再現しないため困っております。

    よろしくお願い致します。
    2013年7月23日 2:39

回答

  • Error出力を食わせたいのであれば、コマンド感覚で 2>1& を後ろにつけてみてもダメでしょうか

    【ご参考】
    Windows PowerShell 入門(9)-エラー編 http://codezine.jp/article/detail/2811

    PS 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
    2013年7月23日 3:05

すべての返信

  • Error出力を食わせたいのであれば、コマンド感覚で 2>1& を後ろにつけてみてもダメでしょうか

    【ご参考】
    Windows PowerShell 入門(9)-エラー編 http://codezine.jp/article/detail/2811

    PS 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
    2013年7月23日 3:05
  • Chuki様

    御回答有り難うございます。

    無事にエラーメッセージを取得することができました。

    有難うございました。

    2013年7月23日 5:32