Estoy ejecutando un servidor desde un archivo por lotes y quiero que la salida del servidor se muestre en la pantalla y también se escriba en un archivo de registro. Encontré una manera de hacer esto a partir de esta respuesta :
powershell "startmyserver | tee server.log"
El problema es que la tubería hace que el primer comando se ejecute y se complete por completo antes de que se ejecute el segundo comando. Esto significa que no puedo monitorear la salida estándar de mi servidor mientras se está ejecutando, que es lo que estoy tratando de hacer (no quiero tener que apagar el servidor solo para verificar los mensajes de registro más recientes).
Para un ejemplo más simple lo intenté pause
. Bueno, pause
no existe en Powershell, así que tuve que ejecutarlo dentro de un cmd
shell anidado :
powershell "cmd /c pause | tee test.txt"
Como era de esperar, después de ejecutar este comando me sale un cursor intermitente. Después de un tiempo, presiono una tecla y luego aparece "Presione cualquier tecla para continuar" y se escribe en el archivo casi al mismo tiempo.
Lo que quiero que suceda es la tubería para transmitir el stdout línea por línea al siguiente comando. En otras palabras, cada vez que se encuentra con un carácter EOL, debe enviar algún resultado y esto (en mi caso tee
) debería hacer que el texto aparezca en la pantalla y se escriba simultáneamente en el archivo. (De hecho, incluso no me preocupa si el texto se escribe en el archivo línea por línea, podría escribirse todo al final, aunque eso no sería lo ideal. Solo quiero poder ver las líneas en la pantalla tal como están escritas).
¿Es esto posible en Símbolo del sistema y / o Powershell?
pause
? Utilicé pause
solo por conveniencia porque no quería un comando que terminara de inmediato y, por lo tanto, hiciera imposible saber si las líneas se transmitieron antes de que se completara el comando
powershell cmd /c pause | tee "test.txt"
estás corriendo tee en tu contexto actual. Estoy ejecutando esto desde cmd (no ps1), por lo que este comando fallará al igualtee
que un comando Powershell. si este comando funcionó para usted, supongo que (a) tiene otrotee
en su sistema o (b) lo ejecutó desde Powershell. Ninguno de los cuales es mi caso de uso.