2011-12-15 8 views
7

En un símbolo del sistema, pruebe esto:¿Powershell olvida establecer ERRORLEVEL en los errores del analizador?

PowerShell aaa

eco ErrorLevel es% errorlevel%

PowerShell fallar (con un error). También verá "ErrorLevel is 1". Esto se debe a que ejecuta aaa como una secuencia de comandos, lo que genera un error no controlado, que establece el nivel de error.

Sin embargo, ahora intente esto:

PowerShell '

eco ErrorLevel es% errorlevel%

PowerShell fallar (con un error). Esta vez, también verá "ErrorLevel es 0".

Me doy cuenta de que es un problema diferente. Powershell incluso dirá que es un ParserError, y es porque eché a perder los argumentos de la línea de comandos. Aún así, eso no es bueno.

No tengo claro por qué se comporta de esta manera. Supongo que esto fue un descuido. Otros programas por ahí olvidan configurar errorlevel en fallas, pero en este caso es como si hubieran llegado a la mitad. Incluso es estableciéndolo en 0 aquí en lugar de no configurarlo en absoluto.

+1

Una pequeña corrección: no hay forma de que una aplicación de consola no establezca el nivel de error. Esto solo es posible para comandos internos. –

+0

Windows Script Host (cscript) tiene un problema similar. Es de suponer que MS vea Powershell y WSH como alternativas en lugar de clientes del shell de comandos. –

+1

Una solución alternativa es que su secuencia de comandos Powershell/WSH devuelva un valor específico distinto de cero en caso de éxito; -1 podría ser una buena elección. –

Respuesta

1

Hmm Creo que acepto que un error de análisis debe establecer el código de retorno a cero. Sugiero archivar esto en el sitio de conexión Powershell. http://connect.microsoft.com/PowerShell

+0

Me imagino que hemos elegido el cerebro de la comunidad tanto como sea posible en este caso. No me importaría tener que lidiar con el código de retorno "0" si hubiera una buena razón, pero me imagino que el comportamiento para esta situación simplemente no se definió deliberadamente. –

Cuestiones relacionadas