Pregunta

Al ejecutar un script de PowerShell (en 2.0) usando el -Expediente Interruptor de línea de comando, y definiendo explícitamente los parámetros de entrada en Param, el código de salida siempre es "0" (nunca falla) en lugar de devolver correctamente el código de error definido o esperado.
Esto no ocurre cuando se usa las definiciones de parámetros explícitos y el -Dominio Cambio, sin embargo, para fines extraños, necesito mantener el interruptor de archivo en mis scripts.

Cualquier ayuda con un solución alterna (Eso no implica eliminar las definiciones de parámetros explícitos) sería extremadamente útil.

PowerShell "no puede devolver el código de salida correcto":

EXIT1.PS1: llame al script que define explícitamente los parámetros. ErrorLevel es siempre 0, incluso si hay partes del script que fallan desagradablemente.

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

Producción:

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

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




Ahora, intentemos lo mismo al modificar la función de parámetro para que sea menos explícito:

EXIT1LOOSEPARAM.PS1:

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

Salida (con tres parámetros):

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

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




Parece que cuando define explícitamente los parámetros de entrada, PowerShell parece "perder su maldita mente" por alguna razón y no puede devolver el código de salida adecuado.

¿Alguien tiene una solución o puede explicar por qué está sucediendo esto?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top