Estou executando um servidor a partir de um arquivo em lotes e quero que a saída do servidor seja exibida na tela e também gravada em um arquivo de log. Eu encontrei uma maneira de fazer isso com esta resposta :
powershell "startmyserver | tee server.log"
O problema é que o canal faz com que o primeiro comando seja executado e completamente concluído antes da execução do segundo comando. Isso significa que não consigo monitorar o stdout do meu servidor enquanto ele estiver em execução, e é isso que estou tentando fazer (não quero desligar o servidor apenas para verificar as mensagens de log mais recentes).
Para um exemplo mais simples, tentei pause. Bem, pausenão existe no Powershell, então tive que executá-lo dentro de um cmdshell aninhado :
powershell "cmd /c pause | tee test.txt"
Sem surpresa, depois de executar este comando, recebo um cursor piscando. Depois de um tempo, pressiono uma tecla e, em seguida, "Pressione qualquer tecla para continuar" aparece e é gravado no arquivo quase ao mesmo tempo.
O que eu quero que aconteça é o canal para transmitir o stdout linha por linha para o próximo comando. Em outras palavras, sempre que encontrar um caractere EOL, ele deverá enviar alguma saída e isso (no meu caso tee) fará com que o texto apareça na tela e seja gravado simultaneamente no arquivo. (Na verdade, eu nem me preocupo em saber se o texto está escrito no arquivo linha por linha, ele pode ser escrito no final, embora isso não seja o ideal. Eu só quero poder ver as linhas na tela como estão escritos.)
Isso é possível no prompt de comando e / ou no PowerShell?
pause? I utilizado pauseapenas por conveniência, porque eu não queria um comando que iria encerrar imediatamente e, portanto, torná-lo impossível dizer se as linhas foram transmitidos antes do comando foi concluído
powershell cmd /c pause | tee "test.txt"está executando o tee no seu contexto atual. Como estou executando isso no cmd (não no ps1), esse comando falhará, comoteeé um comando do PowerShell. se esse comando funcionou para você, presumo que (a) você tenha outroteeno seu sistema ou (b) você o executou no Powershell. Nenhum dos quais é o meu caso de uso.