none
標準エラー出力の取得方法は? RRS feed

  • 質問

  • はじめまして。風の鳩サブレーと申します。

    POWERSHELLはごく最近知ったのですがすごくいいですね。

    ただ他の投稿にもあるようにドキュメント類が少なく苦戦しています。

    フォーラムが出来たと聞いたので早速質問させていただきます。

     

    外部プログラムを実行して結果を変数に取り込む場合

      $result = &"外部プログラム"

    で取り込むことが出来ますが、実行したプログラムが標準エラー出力(stderr)に吐いた場合には

    コンソールに表示されてしまい変数に取り込ことが出来ません。

    trapで取り込めないかと考えましたがコマンドの実行自体は成功していて

    PowerShell自体がエラーを起こしているわけではないためうまくいかないようです。

    何か方法をご存知ありませんか?

     

    実行例 )

    VMWAREのPerl APIを使用してゲストOS一覧を取得する

    (まったく関連性の無い例ですみません。)

     

    <実行が成功した場合は変数に結果(多分標準出力)が格納される>

    PS > $kekka=&".\vmware-cmd.bat" -H xxx.xxx.xxx.xxx -U root -P xxxx -l
      PS > echo $kekka
    /root/vmware/luna/luna.vmx
    /root/vmware/mars/mars.vmx

    PS >

     

    <パスワードを間違えた場合コンソールに表示される>
     PS> $kekka=&".\vmware-cmd.bat" -H xxx.xxx.xxx.xxx -U root -P xxxxx -l
    C:\Program Files\VMware\VMware VmPerl Scripting API\vmware-cmd: Could not connect to vmware-authd  (VMControl error -4: Permission denied: Login (username/password) incorrect)

    PS > echo $kekka

    PS >

     

    2007年6月27日 4:41

回答

  • 自己レスです。特にPOWERSHELL特有方法ではありませんがとりあえず以下の方法で解決しました。

    もっと良い方法があればコメントください。

     

    PS > $kekka=&".\vmware-cmd.bat" -H xxx.xxx.xxx.xxx -U root -P xxxx -l 2>&1

     

    正常の場合は変数のタイプがString

    エラーの場合は変数のタイプがErrorRecord

    で判定できそうです。

    2007年6月27日 5:42

すべての返信

  • 自己レスです。特にPOWERSHELL特有方法ではありませんがとりあえず以下の方法で解決しました。

    もっと良い方法があればコメントください。

     

    PS > $kekka=&".\vmware-cmd.bat" -H xxx.xxx.xxx.xxx -U root -P xxxx -l 2>&1

     

    正常の場合は変数のタイプがString

    エラーの場合は変数のタイプがErrorRecord

    で判定できそうです。

    2007年6月27日 5:42
  • こんにちは、フォーラムオペレーターの鈴木裕子です

     

    ご投稿からかなり時間の経過したスレッドだったのですが、同様の情報を探している方には参考になるスレッドだと思いましたので、勝手ながら私の方で回答チェックをつけさせていただきました。

    kazenohatosabure さんはチェックの解除ができますので、もし不適切でしたら修正をお願いします。

     

    回答チェックはスレッドの終了を意味するものではありませんので、何か情報をお持ちの方いらっしゃったら、引き続きご投稿くださいね!よろしくお願いします

    2009年1月8日 8:55
    モデレータ