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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top