302 votes

Comment arrêter un script PowerShell à la première erreur ?

Je veux que mon script PowerShell s'arrête lorsque l'une des commandes que j'exécute échoue (par exemple set -e dans bash). J'utilise les deux commandes Powershell ( New-Object System.Net.WebClient ) et des programmes ( .\setup.exe ).

9voto

Peter L Points 474

Je suis novice en matière de powershell mais cette méthode semble être la plus efficace :

doSomething -arg myArg
if (-not $?) {throw "Failed to doSomething"}

2voto

harvey263 Points 76

Je suis venu ici pour chercher la même chose. $ErrorActionPreference="Stop" tue mon shell immédiatement alors que je préférerais voir le message d'erreur (pause) avant qu'il ne se termine. Je me rabats sur mes sensibilités batch :

IF %ERRORLEVEL% NEQ 0 pause & GOTO EOF

J'ai trouvé que cela fonctionne à peu près de la même manière pour mon script ps1 particulier :

Import-PSSession $Session
If ($? -ne "True") {Pause; Exit}

1voto

Jarekczek Points 2297

Il semble qu'une simple remise en jeu fasse l'affaire.

param ([string] $Path, [string] $Find, [string] $Replace)
try {
  ((Get-Content -path $Path -Raw) -replace $Find, $Replace) | Set-Content -Path $Path
  Write-Output Completed.
} catch {
  # Without try/catch block errors don't interrupt program flow.
  throw
}

Sortie maintenant Complété n'apparaît qu'après une exécution réussie.

0voto

ubi Points 939

Redirection de stderr a stdout semble également faire l'affaire sans aucune autre commande/enveloppe de bloc de script, bien que je ne puisse pas trouver d'explication à ce phénomène

# test.ps1

$ErrorActionPreference = "Stop"

aws s3 ls s3://xxx
echo "==> pass"

aws s3 ls s3://xxx 2>&1
echo "shouldn't be here"

Cela donnera le résultat suivant comme prévu (la commande aws s3 ... renvoie à $LASTEXITCODE = 255 )

PS> .\test.ps1

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
==> pass

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X