Eu uso este comando para ver a saída no console e em um arquivo:
powershell -command "my_command_1 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
powershell -command "my_command_2 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
# etc
Não funciona tão bem quanto eu esperava e tenho algumas perguntas:
- Como redireciono o stderr também para um arquivo?
A saída funciona muito estranha. Para alguns comandos, existe um grande atraso entre o texto impresso e o console / arquivo atualizado. Para alguns outros comandos, a saída parece atualizada quando o texto é impresso (eu executo comandos sem tee e sei o que deve ser impresso). Esse atraso torna esse tee quase inútil - e se algum erro crítico for impresso para que eu precise interromper o comando, mas não veja nada até que seja tarde demais?
Para alguns comandos, a saída é impressa somente após a conclusão do comando completo.
- Além disso, mesmo que o comando solicite a entrada do usuário, a saída do console / arquivo está vazia! Para esse comando, eu sei o que ele espera e imprime cegamente o texto necessário e funcionou, mas para outros - sem saída, esperarei que algo aconteça infinitamente enquanto o comando aguardará minha entrada!
Existem soluções para esses problemas? Caso contrário, esse item no PowerShell é completamente inútil.
fonte
Respostas:
My-Command 2>&1 | Tee-Object 'myfile.log'
. VejaGet-Help about_Redirection
.Get-Help about_Try_Catch_Finally
. O comando que você está executando é um programa externo ou um script?Tee
pode lidar bem com seqüências parciais, mas outros cmdlets comoForEach-Object
ouSelect-Object
certamente não. Observe queGet-Content
possui uma opção especial-ReadCount
que, de certa forma, substitui esse comportamento e interfere seriamente em umSelect-Object -Skip/-First/-Last/-Unique
comando mais abaixo no canal.Pode muito bem ser que os programas externos que você está executando não obedeçam às convenções que o PowerShell espera.
Tee
, por exemplo, é chamado corretamenteTee-Object
, o que deve indicar os tipos de coisas com as quais é bom trabalhar. Nesse caso, você pode ser mais ao longo da linha para obtertee.exe
a partir GNU Win32 Utils ou MSYS que são projetados para encaminhar imediatamente o conteúdo.fonte