터미널에서 "팔로우"(실시간) 모드로 Windows 10 이벤트 로그를 보시나요?

터미널에서 "팔로우"(실시간) 모드로 Windows 10 이벤트 로그를 보시나요?

Linux에서 시스템 로그인 터미널을 실시간으로 관찰하려면 명령을 사용하여 "파일이 커짐에 따라 데이터를 추가하는 출력" 또는 스위치를 사용하여 파일을 tail출력 할 수 있습니다./var/log/syslog-f--follow

tail -f /var/log/syslog

... 또는 다음을 사용할 수도 있습니다.

dmesg --follow

... 여기서 -w, --follow인수는 dmesg"새 메시지 대기"를 나타냅니다.

어쨌든 이 모드의 두 응용 프로그램은 일반적으로 터미널을 차단하고 Ctrl-C를 눌러 종료할 때까지 새 텍스트 줄/메시지가 나타나면 덤프합니다.

Windows에서는 시스템 로그에 해당하는 것이 GUI 애플리케이션인 이벤트(로그) 뷰어인 것으로 알고 있습니다. 조금 있다가 찾아보니https://www.petri.com/command-line-event-logWEVTUTIL.EXE- 명령줄 응용 프로그램을 사용하여 Windows 이벤트 로그를 쿼리 할 수 있음을 나타냅니다 .

그래서 나는 이것을 시도했습니다 :

C:\>wevtutil qe System

dmesg...하지만 이는 단순히 모든 이벤트를 덤프한 다음 종료됩니다( 인수 없이 Linux에서 호출하는 것과 같습니다 ).

도움말을 살펴보았지만 "follow" 모드에 wevtutil /?들어갈 명령줄 인수를 볼 수 없습니다 wevtutil. 즉, 해당 지점까지 모든 것을 덤프한 후 터미널을 차단하고 새 이벤트/텍스트 줄을 있는 그대로 인쇄합니다. 기록됨).

그렇다면 팔로우 모드에서 작업을 시작하는 것이 가능합니까 wevtutil? 그렇다면 어떻게 해야 합니까? 그렇지 않은 경우 동일한 작업을 수행할 수 있는 다른 유틸리티가 있습니까? Windows의 시스템 이벤트 로그를 팔로우 모드에서 터미널에 덤프합니까?

답변1

이동sysinternals.com, ProcessExplorer에 대한 설명서를 살펴보세요. exe, 이벤트, 메시지 및 실시간 또는 기간으로 필터를 설정할 수 있습니다. 추적 및 디버깅도 가능합니다. Sysinternals Suite는 이벤트 뷰어보다 훨씬 더 자세한 정보를 제공합니다.

  1. 프로세스탐색기
  2. 프로세스모니터
  3. 프로세스 덤프

필요한 이벤트나 개체를 찾았으면 속성을 확인하여 터미널에서 무엇을 호출할 수 있는지 확인하세요.

답변2

좋아요, 좀 더 찾아봤습니다. 이것을 찾았습니다:

... 이 동작에 PowerShell을 사용하는 예를 제공합니다. 이 게시물을 바탕으로 제가 한 일은 다음과 같습니다.

먼저 PowerShell 스크립트를 만들고 싶었습니다. 그 페이지https://www.windowscentral.com/how-create-and-run-your-first-powershell-script-file-windows-10PowerShell 스크립트의 확장자는 .ps1.

그런 다음 특별히 드라이브 루트에 스크립트를 만들고 싶었습니다 C:. 이는 Windows 10에서 보호됩니다. 이 작업을 수행하려면 관리자 권한이 있어야 합니다(그렇지 않으면 Access is denied.). 그래서 관리자 모드("관리자 권한으로 실행")에서 명령 프롬프트를 실행하고 다음 두 파일을 만들었습니다.

C:\WINDOWS\system32>cd C:\
C:\>echo > wevent_tail_01.ps1
C:\>echo > wevent_tail_02.ps1

이 파일은 비어 있지 않지만 ECHO is on.그 안에 텍스트 줄이 있습니다. 그러나 해당 줄은 삭제할 수 있습니다. 또는 (https://ss64.com/ps/syntax-comments.html) 앞에는 #PowerShell의 주석 문자가 붙습니다.

그런 다음 해당 파일을 메모장에서 열어 편집했습니다. 동일한 터미널에서 관리 권한이 유지됩니다(그렇지 않으면 메모장에서 파일을 저장하려고 할 때 액세스가 거부됩니다).

C:\>notepad wevent_tail_01.ps1
C:\>notepad wevent_tail_02.ps1

그런 다음 SO:15262196의 코드를 다음과 같이 붙여넣었습니다 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
}

... 그리고 코드를 붙여넣었습니다.다른 답변하지만 wevent_tail_02.ps1제대로 작동하지 못했습니다. 따라서 이 게시물의 나머지 부분에서는 wevent_tail_01.ps1.

이제 PowerShell에서 이 스크립트를 실행할 차례입니다. windowscentral 게시물에서는 경로 앞에 앰퍼샌드와 공백을 붙여 스크립트가 실행된다는 점을 지적합니다 &. 그러나 PowerShell을 정상적으로 시작하고 시도해 보면 다음과 같은 결과를 얻을 수 있습니다.

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

Windowscentral 게시물에서는 Set-ExecutionPolicy RemoteSigned이 문제를 해결하는 데 사용할 것을 권장합니다. 하지만 이 명령을 완료하려면 관리 권한으로 PowerShell을 다시 실행해야 합니다. 그러나 현재 사용자로 제한할 수도 있으며, 이 경우 정상적으로 시작된 PowerShell을 유지할 수 있습니다.

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:\>

따라서 이 시점에서 스크립트를 실행할 수 있는 권한이 있어야 합니다.

PS C:\> & "C:\wevent_tail_01.ps1"

... 그리고 스크립트는 터미널을 차단하지만 대부분의 경우 텍스트가 덤프되지 않습니다. 그래서 우리는 이것이 작동하는지 테스트하고 보고 싶습니다.

이를 위해서는 관리 속성이 포함된 또 다른 PowerShell을 열어야 합니다. 에서 올바른 정보를 찾았습니다.https://mcpmag.com/articles/2016/09/08/powershell-to-write-to-the-event-log.aspx- 간단히 말해서, Windows 이벤트 로그에 임의의 항목을 작성하려면 "소스"를 지정해야 합니다.

PS C:\WINDOWS\system32> New-EventLog -LogName System -Source 'MySysTest'

... 그런 다음 Write-EventLog이벤트 로그에 쓸 수 있습니다.

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

이제 실행 및 차단 중이었던 첫 번째 PowerShell로 전환하면 C:\wevent_tail_01.ps1다음과 같은 내용이 표시됩니다.

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...

사실 처음에는 이 터미널로 전환할 때 이런 모습을 보지 못했는데, 그러다가 한 번 우클릭을 했더니 '깨어나고' 실시간으로 라인을 덤핑하기 시작한 것 같아요.

글쎄요, 이것이 제가 원했던 것 같아요. 비록 이것이 좀 더 쉬웠을 거라 기대하긴 했지만요...


편집: 시스템 로그와 응용 프로그램 로그를 모두 "꼬리"려면 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
}

...그리고 테스트하려면가지다고유한 이름을 가진 새 공급자를 애플리케이션 로그에 등록하려면 다음을 수행하세요.

New-EventLog -LogName Application -Source 'MyAppTest'

... 다음을 사용하여 테스트/실행할 수 있습니다.

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

관련 정보