Quando si esegue uno script PowerShell (in 2.0) utilizzando l'interruttore di linea -File di comando, e definendo in modo esplicito i parametri di input in Param, il codice di uscita è sempre "0" (non manca mai) invece di restituire correttamente il codice di errore definito o previsto.
questo non avviene quando si utilizzano le definizioni dei parametri espliciti e l'interruttore -Command, ma per scopi estranei, ho bisogno di mantenere l'interruttore -File nei miei scritti.PowerShell non riesce a restituire il corretto codice di uscita
Qualsiasi assistenza con una soluzione alternativa (che non comporta la rimozione delle definizioni esplicite dei parametri) sarebbe estremamente utile.
PowerShell "non riesce a restituire il codice di uscita corretto":
exit1.ps1: Call script che definisce esplicitamente i parametri. Errorlevel è sempre 0, anche se vi sono parti dello script che falliscono in modo insensato.
param(
[Parameter(mandatory=$true)][string]$arg1,
[Parameter(mandatory=$true)][string]$arg2,
[Parameter(mandatory=$true)][string]$arg3
);
exit 1;
uscita:
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
0
Ora, consente di provare la stessa cosa quando si modifica la funzione param ad essere meno esplicito:
Exit1LooseParam.ps1:
param(
$arg1,
$arg2,
$arg3
);
exit 1;
uscita (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 definisce in modo esplicito i parametri di input, PowerShell sembra "perdere la sua mente uno straccio" per qualche motivo e non riesce a tornare il codice di uscita corretto.
Qualcuno ha una soluzione alternativa o essere in grado di spiegare perché questo sta accadendo?
che non sembra riportare il codice di uscita in modo corretto. Grazie! – JonnyG
Grazie per questo, ho risolto un problema anche per me :) –
senza questo ho potuto ottenere solo l'uscita per restituire 0 o 1 – cmcginty