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
).
Réponses
Trop de publicités?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}
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.
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
- Réponses précédentes
- Plus de réponses