txt print outfile comando powershell redirect

powershell - print - Escritura de errores y salida a un archivo de texto y consola



powershell output to file (3)

Has probado:

./MyScript.ps1 2>&1 | tee -filePath c:/results.txt

2>&1 es lo que estás buscando

Nota: Esta respuesta funciona muy bien en PowerShell 1.0 y 2.0, pero capturará SOLAMENTE la salida estándar y los errores en PowerShell 3.0 y posterior.

Intento escribir todo el resultado (errores incluidos) de un script de ejecución en la consola y un archivo al mismo tiempo. He intentado varias opciones diferentes:

./MyScript.ps1 | tee -filePath C:/results.txt # only the output to the file ./MyScript.ps1 2> C:/results.txt # only the errors to the file and not the console ./MyScript.ps1 > C:/results.txt # only the output to the file and not the console

Mi esperanza era poder usar el archivo para revisar los resultados / errores.

EDITAR:

Este es mi script de prueba actual. El resultado deseado es que se puedan ver los tres mensajes.

function Test-Error { echo "echo" Write-Warning "warning" Write-Error "error" } Test-Error 2>&1 | tee -filePath c:/results.txt


No estaba satisfecho con ninguna respuesta que estaba encontrando, así que mezclé algunas y se me ocurrió esto (en PowerShell 3.0+ ):

$output = try{your_command *>&1}catch{$_}

Con esto puedes capturar todos los errores y salidas que se generan al tratar de usar your_command .

Captura excepciones cuando usa un comando inexistente:

PS C:/Users/jdgregson> $output = try{your_command *>&1}catch{$_} PS C:/Users/jdgregson> echo $output your_command : The term ''your_command'' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:15 + $output = try{your_command 2>&1}catch{$_} + ~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (your_command:String) [], Comman dNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:/Users/jdgregson>

Captura excepciones cuando pasa argumentos no válidos a un comando existente:

PS C:/Users/jdgregson> $output = try{cat C:/invalid-path.txt *>&1}catch{$_} PS C:/Users/jdgregson> echo $output cat : Cannot find path ''C:/invalid-path.txt'' because it does not exist. At line:1 char:15 + $output = try{cat C:/invalid-path.txt 2>&1}catch{$_} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:/invalid-path.txt:String) [Ge t-Content], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo ntentCommand

Y capta la salida si no hubo ningún problema con su comando en absoluto:

PS C:/Users/jdgregson> $output = try{cat C:/valid-path.txt *>&1}catch{$_} PS C:/Users/jdgregson> echo $output this file is really here

Funciona también para tu ejemplo:

PS C:/Users/jdgregson> $output = try{Test-Error *>&1}catch{$_} PS C:/Users/jdgregson> echo $output echo WARNING: warning Test-Error : error At line:1 char:15 + $output = try{Test-Error *>&1}catch{$_} + ~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep tion + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio n,Test-Error


No pude obtener los errores y los resultados en el mismo archivo. Una solución alternativa que funcionó para mí:

./MyScript.ps1 2> C:/errors.txt | tee -filePath C:/results.txt

Actualización: he trabajado más y utilicé Start-Transcript y Stop-Transcript en mi modo para capturar todo y ¡funcionó!