PowerShell non riesce a restituire il codice di uscita corretto
-
29-10-2019 - |
Domanda
Quando si esegue uno script PowerShell (in 2.0) usando il -File Switch riga di comando e definendo esplicitamente i parametri di input in Param, il codice di uscita è sempre "0" (mai fallisce) invece di restituire correttamente il codice di errore definito o previsto.
Ciò non si verifica quando si utilizza le definizioni dei parametri espliciti e -Comando Switch, tuttavia per scopi estranei, devo mantenere l'interruttore -file nei miei script.
Qualsiasi assistenza con a Soluzione alternativa (Ciò non implica la rimozione delle definizioni di parametri espliciti) sarebbe estremamente utile.
PowerShell "non riesce a restituire il codice di uscita corretto":
EXIT1.PS1: Chiama lo script che definisce esplicitamente i parametri. ErrorLevel è sempre 0, anche se ci sono parti dello script che falliscono invariamente.
param(
[Parameter(mandatory=$true)][string]$arg1,
[Parameter(mandatory=$true)][string]$arg2,
[Parameter(mandatory=$true)][string]$arg3
);
exit 1;
Produzione:
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
0
Ora, proviamo la stessa cosa quando si modifica la funzione param per essere meno esplicito:
Exit1looseparam.ps1:
param(
$arg1,
$arg2,
$arg3
);
exit 1;
Output (con tre parametri):
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
1
Sembra che quando si definiscono esplicitamente i parametri di input, PowerShell sembra "perdere la sua mente strana" per qualche motivo e non riesce a restituire il codice di uscita appropriato.
Qualcuno ha una soluzione alternativa o può spiegare perché questo sta accadendo?
Nessuna soluzione corretta