Hoje participei do SQL Saturday 718, em Joinville – SC (BTW, mais um p… evento – que merece um post à parte).
Durante a palestra do Rodrigo Crespi, sobre “Linux para DBA SQL Server”, surgiu a seguinte pergunta: Como fazer, via Powershell, para acompanhar o andamento de um log, algo como o “tail -f” no Linux faz?
Depois de algumas discussões, o consenso ficou no: “Faz um ‘while true’ e fica dando um Get-Content no arquivo.” A solução me doeu no ouvido, mas foi aceito e segue o baile.
Mas sabe quando fica aquela ´pulga atrás da orelha que não vai te deixar em paz enquanto você testar? Então, eis que abro um prompt do Posh, dou uma olhada nos parâmetros e encontro o parâmetro -Wait.
Vamos ao Help e….
E o que a gente faz nessa hora? Google, Bing? Não… A gente testa… Por isso que dizem que manual só se lê depois que o troço estraga…
Teste 1:
- Crie no C:\temp um arquivo texto e abra ele
- No powershell, digite:
1 |
gc .\Teste.txt -Wait |
Se tudo correr como esperado, você vai ver o que for digitado no arquivo texto, na tela do powershell… E eis que…
É, nada novamente…
“E se eu salvar o arquivo?? Será que ele exibe?”
Óóóó… Já temos alguma coisa… Se eu salvar o arquivo, então temos um retorno, o que levaria a crer que a ideia do While poderia começar a fazer algum sentido…
Mas…. E se começarmos a jogar no mesmo arquivo, uma massa de dados… Qual o comportamento?
Para isso, nada melhor que o bom e velho ping – t > c:\Teste.txt para testar…
E aí está! A cada novo registro, a linha é exibida perfeitamente… O -Wait é o cara que procurávamos de manhã!
Então, fica a dica… Para fazer via Powershell o que o tail faz, usem o Get-Content com o parâmetro -Wait.
Mas e se eu quiser filtrar o arquivo por um valor que eu esteja procurando? Tipo um tail -f teste.txt | grep “30ms”
Faça um:
1 |
gc .\Teste.txt -Wait | where {$_ -match "30ms"} |
E a partir daí, você pode começar a viajar nas perguntas (e eu, nas respostas…)…
Abraços!