「Invoke-Expression」のステータス(成功か失敗か)を取得するにはどうすればいいですか?質問する

「Invoke-Expression」のステータス(成功か失敗か)を取得するにはどうすればいいですか?質問する

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
}

しかし、パイプライン出力がないことを前提としている

おすすめ記事