Invoke-Expression
呼び出されたコマンドのすべてのテキストを返します。
しかし、このコマンドが正常に実行されたか失敗したかを示すシステム戻り値を取得するにはどうすればよいでしょうか? CMD では、%errorlevel%
外部コマンドの実行状態を取得するために を使用できます。PowerShell ではどうでしょうか?
ベストアンサー1
$?
通常、最後に実行されたステートメントのステータスを検査するには、次のように使用します。
PS C:\> Write-Output 123 | Out-Null; $?
True
PS C:\> Non-ExistingCmdlet 123 | Out-Null; $?
False
しかし、これは では機能しませんInvoke-Expression
。渡された式内の文がInvoke-Expression
失敗する可能性があるとしても、Invoke-Expression
呼び出し自体は成功するからです(つまり、式は無効/非機能的であるにもかかわらず呼び出されます)。
次のようにInvoke-Expression
使用する必要があります:
try {
Invoke-Expression "Do-ErrorProneAction -Parameter $argument"
} catch {
# error handling go here, $_ contains the error record
}
または罠:
trap {
# error handling goes here, $_ contains the error record
}
Invoke-Expression "More-ErrorProneActions"
代わりに、";$?"
呼び出したい式に追加します。
$Expr = "Write-Host $SomeValue"
$Expr += ';$?'
$Success = Invoke-Expression $Expr
if(-not $Success){
# seems to have failed
}
しかし、パイプライン出力がないことを前提としている