2012-07-12 18 views
11

Lo busqué pero no puedo encontrar una resolución. Por salida "extra", me refiero al texto adicional que emite Write-Output después de su mensaje de error. es decir .:¿Hay alguna forma de suprimir el resultado "extra" del cmdlet Write-Error?

write-error -Message "test" 

produce:

write-error -Message "test" : test 
+ CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

me gustaría sólo para ver el texto "prueba", y recuperarla desde stderr a través de un objeto de proceso que se ejecuta la secuencia de comandos PS.

Sé que una expresión regular complicada (para captar TODOS los posibles caracteres que podrían aparecer en la categoría, etc.) podría desarrollarse, pero quiero evitar eso. No olvide que Write-Error también inyecta un carácter de nueva línea en cada posición de char de 80 debido a la consola, por lo que debería tenerse en cuenta también.

¿Hay alguna manera de decirle a Powershell (2.0) que no sea tan prolijo cuando escribe en stderr y solo escribe la parte del mensaje?

Respuesta

7

Creo que no es posible límite la salida de un error, pero se puede solucionar de esta manera:

$Host.UI.WriteErrorLine("My custom error") 
+0

¡Muchas gracias! ¡Esto hará el truco! – joebalt

+1

Buena idea, pero desafortunadamente la redirección de salida de error a la salida estándar '2> & 1' ya no funciona. –

4

$ Host.UI.WriteErrorLine no actualiza la variable $ error:

PS> $error.Clear() 
PS> $Host.UI.WriteErrorLine("My custom error") 
My custom error 

PS> $Error.Count 
0 

se debe utilizar el cmdlet Write-Error pero la salida es todavía detallado:

PS> Write-Error "My custom error" 
Write-Error "My custom error" : My custom error 
    + CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

Th Existe una opción para generar menos mensajes detallados con la variable incorporada $ ErrorView, su valor predeterminado es 'Normal' (prolijo). Puede establecerlo en "CategoryView" para mensajes breves.

PS> $ErrorView="CategoryView" 
PS> Write-Error "My custom error" 
NotSpecified: (:) [Write-Error], WriteErrorException 
+1

Otra solución alternativa para '$ error' es usar $ error.add (" Mi error personalizado ")'. Lo mejor para personalizar los errores es crear una función que escriba mensajes de error personalizados y, si es necesario, agréguelo a $ error. –

+1

Para modificar la variable automática '$?' En la función es posible agregar un 'Error de escritura' Mi error personalizado "-ErrorAction silenntlycontinue. –

Cuestiones relacionadas