実行しているコマンドが失敗したときにPowerShellスクリプトを停止させたい(bashでset -e
など)。 Powershellコマンド(New-Object System.Net.WebClient
)とプログラム(.\setup.exe
)の両方を使用しています。最初のエラーでPowerShellスクリプトを停止する方法はありますか?
答えて
$ErrorActionPreference = "Stop"
のようになります(つまり、これはコマンドレットに最適です)。
EXEの場合、EXE呼び出しごとに$LastExitCode
をチェックし、失敗したかどうかを判断する必要があります。残念ながら、Windowsでは、「成功」または「失敗」の終了コードを構成するものに関して、EXEがひどく一貫しているわけではないため、PowerShellがここで助けてくれるとは思えません。ほとんどの場合、成功を示すUNIX標準の0に従いますが、すべてではありません。 CheckLastExitCode function in this blog postをチェックしてください。それが役に立つかもしれません。
スクリプトの冒頭で文$ErrorActionPreference = "Stop"
を使用してこれを達成できるはずです。
デフォルト設定の$ErrorActionPreference
はContinue
です。このため、エラーが発生した後もスクリプトは継続して表示されます。
これはプログラムには影響しません。コマンドレットのみです。 – Joey
悲しいことに、due to buggy cmdlets like New-RegKey and Clear-Disk、これらの回答はどれも十分ではありません。私は現在、私の正気を維持するために、PowerShellスクリプトの一番上にある次の行に定住しています。
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['*:ErrorAction']='Stop'
し、任意のネイティブ呼び出しはこの治療を取得します。
native_call.exe
$native_call_success = $?
if (-not $native_call_success)
{
throw 'error making native call'
}
ネイティブコールパターンがゆっくりと私はおそらくそれがより簡潔作るためのオプションを検討すべきであることを私のために十分に一般的になってきていること。私はまだパワーワードの初心者ですので、提案は大歓迎です。
私は同じことを探してここに来ました。 $ ErrorActionPreference = "Stop"はシェルを終了させる直前にエラーメッセージ(一時停止)を表示するとすぐにシェルを終了させます。私のバッチ感性に戻って落ちる:あなたはPowerShellの機能のためにとexeファイルの呼び出しに扱う若干異なる誤りが必要
Import-PSSession $Session
If ($? -ne "True") {Pause; Exit}
:
IF %ERRORLEVEL% NEQ 0 pause & GOTO EOF
は、私はこれはかなり私の特定のPS1のスクリプトで同じ動作することを発見しましたスクリプトの呼び出し元に失敗したことを伝える必要があります。 PsakeライブラリのExec
の上に構築すると、以下の構造を持つスクリプトはすべてのエラーを止め、ほとんどのスクリプトの基本テンプレートとして使用できます。
Set-StrictMode -Version latest
$ErrorActionPreference = "Stop"
# Taken from psake https://github.com/psake/psake
<#
.SYNOPSIS
This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode
to see if an error occcured. If an error is detected then an exception is thrown.
This function allows you to run command-line programs without having to
explicitly check the $lastexitcode variable.
.EXAMPLE
exec { svn info $repository_trunk } "Error executing SVN. Please verify SVN command-line client is installed"
#>
function Exec
{
[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,
[Parameter(Position=1,Mandatory=0)][string]$errorMessage = ("Error executing command {0}" -f $cmd)
)
& $cmd
if ($lastexitcode -ne 0) {
throw ("Exec: " + $errorMessage)
}
}
Try {
# Put all your stuff inside here!
# powershell functions called as normal and try..catch reports errors
New-Object System.Net.WebClient
# call exe's and check their exit code using Exec
Exec { setup.exe }
} Catch {
# tell the caller it has all gone wrong
$host.SetShouldExit(-1)
throw
}
- 1. 最初のトリガー後にスクロールイベントリスナーを停止する方法はありますか?
- 2. 最初のエラーでフィールド検証を停止する方法はありますか?
- 3. ページ上のスクリプトの実行を停止する方法はありますか?
- 4. PowerShellでIISを停止する方法?
- 5. プログラムでスクロールを停止する方法はありますか?
- 6. 最初の負荷でリアクションレンダリングを停止するクリーナー方法はありますか?
- 7. スクリプト内で一時停止または待つ方法がありますか?
- 8. スポットアピで一時停止する方法はありますか?
- 9. 最初の失敗時にMsTestテストの実行を停止する方法はありますか?
- 10. エラーで終了するPythonスクリプトを停止する方法
- 11. SKActionsを一時停止する方法はありますか?
- 12. Magentoインデクサープロセスを停止する方法はありますか?
- 13. couchdbインデクサープロセスを停止する方法はありますか?
- 14. HXT:最初に変換が成功した後に処理を停止する方法はありますか?
- 15. 最初の項目の上にスクロールリストビューを停止する方法?
- 16. 展開スクリプトで既定のFilegroupを設定するSqlPackage.exeを停止する方法はありますか?
- 17. ビルドがビルドエクスプローラで停止したときにPowerShellスクリプトを実行する方法
- 18. AsyncTaskでHttpClientの実行を停止する方法はありますか?
- 19. ドラッグアンドドロップでdragendのデフォルト動作を停止する方法はありますか?
- 20. concurrent.futuresで実行中のプロセスを停止する方法はありますか?
- 21. 特定のポートでhttp-serverを停止する方法はありますか?
- 22. bashスクリプトで特定の値を停止し強制的に入力する方法はありますか?
- 23. Eclipseをテキストエディタの "italizing"テキストから停止する方法はありますか?
- 24. UIScrollViewのタッチイベントを親ビューから停止する方法はありますか?
- 25. batファイルでoracle 12cを起動/停止する方法はありますか?
- 26. プログラムでSSASキューブ処理を停止する方法はありますか?
- 27. 例外でEclipseを一時停止する方法はありますか?
- 28. appiumサーバーをコマンドラインで停止する方法はありますか?
- 29. OnStartメソッド内でサービスを停止する方法はありますか?
- 30. jqgridでonSelectAllイベントを停止する方法はありますか?
'$ ErrorActionPreference =" Stop "は正常に動作するプログラム(正常に0を返します)で動作しますか? –
いいえ、EXEではまったく動作しません。インプロセスで実行されるPowerShellコマンドレットでのみ機能します。それは一種の痛みですが、EXE呼び出しごとに$ LastExitCodeをチェックして、期待される終了コードとそれを確認し、そのテストが失敗を示していれば、スクリプトの実行を終了するためにスローする必要があります。 'throw" $ exeは終了コード$ LastExitCode "で失敗しました。ここで、$ exeはEXEへのパスです。 –
外部プログラムと連携させる方法に関する情報が含まれているため、受け入れられました。 –