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ó!