在终端中以“跟随”(实时)模式查看 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-log- 指出可以使用WEVTUTIL.EXE命令行应用程序来查询 Windows 事件日志。

因此,我尝试了这个:

C:\>wevtutil qe System

...但这只是转储所有事件,然后退出(与您dmesg在没有任何参数的情况下在 Linux 上调用相同)。

我查看了帮助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-10注意到 PowerShell 脚本的扩展名是.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

相关内容