Question

Lors de l'exécution d'un script PowerShell (en 2.0) en utilisant le -Dossier commutateur de ligne de commande et définir explicitement les paramètres d'entrée dans Param, le code de sortie est toujours "0" (jamais échoué) au lieu de renvoyer correctement le code d'erreur défini ou attendu.
Cela ne se produit pas lors de l'utilisation des définitions de paramètres explicites et du -Commande Commutation, cependant, à des fins étrangères, je dois conserver l'interrupteur -file dans mes scripts.

Toute aide avec un solution de contournement (Cela n'implique pas de supprimer les définitions de paramètres explicites) serait extrêmement utile.

PowerShell "ne renvoie pas le code de sortie correct":

exit1.ps1: script d'appel qui définit explicitement les paramètres. ErrorLevel est toujours 0, même s'il y a des parties du script qui échouent inébranlables.

param(
    [Parameter(mandatory=$true)][string]$arg1,
    [Parameter(mandatory=$true)][string]$arg2,
    [Parameter(mandatory=$true)][string]$arg3
);
exit 1;

Production:

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"

C:\temp\testnant>echo %errorlevel%
0




Maintenant, essayons la même chose lors de la modification de la fonction param pour être moins explicite:

Exit1looseParam.ps1:

param(
    $arg1,
    $arg2,
    $arg3
);
exit 1;

Sortie (avec trois paramètres):

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"

C:\temp\testnant>echo %errorlevel%
1




Il semble que lorsque vous définissez explicitement les paramètres d'entrée, PowerShell semble "perdre son esprit freakin" pour une raison quelconque et ne renvoie pas le code de sortie approprié.

Quelqu'un a-t-il une solution de contournement ou est-il en mesure d'expliquer pourquoi cela se produit?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top