かべぎわブログ

ブログです

Invoke-Expressionでも終了ステータスを取得したい

概要

PowerShellでInvoke-Expressionでも終了ステータス(ExitCode)を取得してみます。

終了ステータスとれない問題

たとえばこんなかんじのPowerShellスクリプトがあったとする。

Write-Host 'wawawa'
exit 2

実行して終了ステータスとると当然Falseになる。

PS > .\wawawa.ps1
wawawa
PS > $?
False

だけどInvoke-Expressionで実行したときは終了ステータスがTrueになってしまう。
これはInvoke-Expressionは正常に成功しているためである。

PS > Invoke-Expression .\wawawa.ps1
wawawa
PS > $?
True

それの解決策

こうするとできる。

PS > $command=".\wawawa.ps1;`$?"
PS > $result=Invoke-Expression $command

PS > $result[-1]
False

おわりに

たいへんですね

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

  • 作者:吉崎 生
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2018/05/30
  • メディア: 単行本(ソフトカバー)