No Linux, se eu quiser observar o terminal de login do sistema em tempo real, posso usar o tail
comando para gerar o /var/log/syslog
arquivo com a opção -f
ou --follow
, que "produz (s) dados anexados à medida que o arquivo cresce", digamos:
tail -f /var/log/syslog
... ou também pode usar:
dmesg --follow
... onde -w, --follow
o argumento for dmesg
significa "Aguarde novas mensagens".
Em qualquer caso, ambos os aplicativos neste modo geralmente bloqueiam o terminal e, em seguida, despejam novas linhas/mensagens de texto à medida que aparecem, até que você pressione Ctrl-C para sair deles.
No Windows, entendo que o equivalente ao log do sistema é o Event (Log) Viewer, que é um aplicativo GUI. Depois de um tempo, descobrihttps://www.petri.com/command-line-event-log- que observa que é possível usar o WEVTUTIL.EXE
aplicativo de linha de comando para consultar o log de eventos do Windows.
Então, eu tentei isso:
C:\>wevtutil qe System
... mas isso simplesmente descarta todos os eventos e depois sai (da mesma forma que se você chamasse dmesg
o Linux sem nenhum argumento).
Eu olhei através da ajuda wevtutil /?
, mas não consigo ver nenhum argumento de linha de comando que pudesse ser colocado wevtutil
no modo "seguir" (ou seja, ele bloqueia o terminal depois de despejar tudo até aquele ponto e, em seguida, imprime novos eventos/linhas de texto como eles são registrado).
Então - é possível trabalhar wevtutil
no modo de acompanhamento e, em caso afirmativo, como? Caso contrário, existe outro utilitário que eu possa usar que faça o mesmo - despejar o log de eventos do sistema do Windows no terminal no modo de acompanhamento?
Responder1
Vá parasysinternals.come consulte a documentação do ProcessExplorer. Você pode definir filtros para exe, eventos, mensagens e em tempo real ou duração. Você também pode rastrear e depurar. O Sysinternals Suite oferece detalhes muito melhores do que o visualizador de eventos.
Depois de encontrar os eventos ou objetos necessários, verifique as propriedades para ver o que você pode chamar no terminal.
Responder2
OK, então procurei algo um pouco mais; encontrei isso:
... que dá exemplos de uso do PowerShell para esse comportamento. Com base nesta postagem, foi o que fiz:
Primeiro, eu queria criar um script do PowerShell; a páginahttps://www.windowscentral.com/how-create-and-run-your-first-powershell-script-file-windows-10observa que a extensão de um script do PowerShell é .ps1
.
Então, eu queria criar especificamente o script em root of drive C:
. Acontece que isso está protegido no Windows 10 - você deve ter privilégios de administrador para fazer isso (caso contrário, você obterá Access is denied.
). Então, iniciei o Prompt de Comando no modo administrador ("Executar como administrador") e criei estes dois arquivos:
C:\WINDOWS\system32>cd C:\
C:\>echo > wevent_tail_01.ps1
C:\>echo > wevent_tail_02.ps1
Observe que esses arquivos não estarão vazios, mas conterão a linha de texto ECHO is on.
- entretanto, essa linha pode ser excluída; ou (https://ss64.com/ps/syntax-comments.html) prefixado com #
qual é o caractere de comentário no PowerShell.
Então, abri esses arquivos no Bloco de Notas para editá-los - no mesmo terminal, para que os privilégios administrativos sejam mantidos (caso contrário, o acesso será negado ao tentar salvar os arquivos do Bloco de Notas):
C:\>notepad wevent_tail_01.ps1
C:\>notepad wevent_tail_02.ps1
Então, colei este código do SO:15262196 como wevent_tail_01.ps1
:
$idx = (get-eventlog -LogName System -Newest 1).Index
while ($true)
{
start-sleep -Seconds 1
$idx2 = (Get-EventLog -LogName System -newest 1).index
get-eventlog -logname system -newest ($idx2 - $idx) | sort index
$idx = $idx2
}
... e colei o código dooutra respostain wevent_tail_02.ps1
, mas não consegui fazê-lo funcionar. Então, no restante deste post, usarei apenas wevent_tail_01.ps1
.
Agora é hora de executar este script no PowerShell; a postagem windowscentral aponta que os scripts são executados prefixando seu caminho com e comercial e espaço &
; no entanto, se você iniciar o PowerShell normalmente e experimentá-lo, obterá:
PS C:\> & "C:\wevent_tail_01.ps1"
& : File C:\wevent_tail_01.ps1 cannot be loaded because running scripts is disabled on this system. For more
information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:3
+ & "C:\wevent_tail_01.ps1"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
A postagem windowscentral recomenda que você use Set-ExecutionPolicy RemoteSigned
para corrigir isso - mas para concluir esse comando, você precisará executar novamente o PowerShell com privilégios administrativos; no entanto, você também pode limitá-lo ao usuário atual; nesse caso, você pode manter o PowerShell normalmente iniciado:
PS C:\> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A
PS C:\>
Então, neste ponto, devemos ter permissão para executar nosso script:
PS C:\> & "C:\wevent_tail_01.ps1"
... e muito bem, o script bloqueará o terminal, mas provavelmente nenhum texto será descartado. Então, gostaríamos de testar e ver se isso funciona.
Para isso precisaremos abrir outro PowerShell, mas com propriedades administrativas; Encontrei a informação certa emhttps://mcpmag.com/articles/2016/09/08/powershell-to-write-to-the-event-log.aspx- resumindo: para escrever coisas arbitrárias nos logs de eventos do Windows, precisamos especificar uma "fonte":
PS C:\WINDOWS\system32> New-EventLog -LogName System -Source 'MySysTest'
... e então podemos usar Write-EventLog
para escrever no log de eventos:
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Information -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Warning -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
Se agora mudarmos para o primeiro PowerShell, onde C:\wevent_tail_01.ps1
estava rodando e bloqueando, deveríamos ver algo como:
PS C:\> & "C:\wevent_tail_01.ps1"
Index Time EntryType Source InstanceID Message
----- ---- --------- ------ ---------- -------
2577 Jun 27 10:34 Information MySysTest 3001 MyApp added a user-requested feature to the dis...
2578 Jun 27 10:35 Warning MySysTest 3001 MyApp added a user-requested feature to the dis...
2579 Jun 27 10:35 Error MySysTest 3001 MyApp added a user-requested feature to the dis...
Na verdade, a princípio não vi isso ao mudar para este terminal, mas depois acho que cliquei com o botão direito uma vez e ele "acordou" e então começou a despejar linhas em tempo real.
Bem, acho que era isso que eu queria - embora eu esperasse que isso tivesse sido um pouco mais fácil...
EDIT: se você deseja "acompanhar" o log do sistema e do aplicativo, aqui está o script do PowerShell:
$sidx = (get-eventlog -LogName System -Newest 1).Index
$aidx = (get-eventlog -LogName Application -Newest 1).Index
while ($true)
{
start-sleep -Seconds 1
$sidx2 = (Get-EventLog -LogName System -newest 1).index
$aidx2 = (Get-EventLog -LogName Application -newest 1).index
get-eventlog -logname system -newest ($sidx2 - $sidx) | sort index
get-eventlog -logname application -newest ($aidx2 - $aidx) | sort index
$sidx = $sidx2
$aidx = $aidx2
}
... e para testar, vocêterpara criar um novo provedor, com um nome exclusivo, registrado no log do aplicativo, então:
New-EventLog -LogName Application -Source 'MyAppTest'
... com o qual você pode testar/iniciar:
Write-EventLog -LogName "Application" -Source "MyAppTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20