PowerShell 查询 Windows Server 事件日志

" title="超专业的IT基础架构经验分享


0

PowerShell 查询 Windows Server 事件日志

编辑:管理员/ 栏目:Windows /发布于:2022年-5月-14日

通过 PowerShell ,可以使用 Get-EventLog、Clear-EventLog、Limit-EventLog、New-EventLog、Remove-EventLog、Show-EventLog 和 Write-EvengLog cmdlet 与这些事件日志进行交互。 

第一个:Get - EventLog [ - logName] <string >  [ - newest <int > ] [<CommonParameters > ]
第二个:Get - EventLog [ - list] [ - asString] [<CommonParameters > ]
第一个用法是查看具体日志用的,第二个用法可以列出系统中所有日志,我们先来看第二个用法的使用:

PS C:\ >  Get-EventLog  -list

  Max(K) Retain OverflowAction        Entries Name
   ------   ------   --------------          -------   ----
      512        7  OverwriteOlder           2 , 167  应用程序
      512        7  OverwriteOlder               0  安全性
      512        7  OverwriteOlder           2 , 629  系统
   15 , 360        0  OverwriteAsNeeded          829  Windows PowerShell



上面的列表和我们在事件查看器中看到的应该是一样的。

我们再来看第一个用法的使用:
PS C:\ > Get-EventLog  -LogName application  -Newest  5

Index Time          Type Source                EventID Message
-----   ----            ----   ------                  -------   -------
14429  四月  04   10 : 42  Info MsiInstaller             11707  Product: Quest PowerG
14428  四月  04   09 : 57  Info MSSQL $SQLEXPRESS          17403  服务器在空闲  1793  秒
14427  四月  04   09 : 43  Info MSSQL $SQLEXPRESS          17896  对于 id 为  1  的计划程
14426  四月  04   09 : 28  Info VMware Server             1103  Virtual machine was a
14425  四月  04   09 : 27  Info MSSQL $SQLEXPRESS           9688  已启动 Service Broker

-LogName后面跟上日志名称,-Newest指列出最近的几条。日志的名称应该就是我们在第二个用法演示中看到的Name列,不过在使用中文时它不能识别,只能使用英文系统下列出的名称:application、security、system。(日志的名称应该是用Get-EventLog -AsString命令查看到的内容)

下面我们来看一下如果进行查询和过滤,这里使用的管道操作(提一下,PowerShell管道传递的是对象,不是字符):

PS C:\> Get-EventLog application | Where-Object {$_.message -match "正在"} | Format-List source,message | more

Source  : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'tempdb'。

Source  : MSSQL$SQLEXPRESS
Message : 正在清除 tempdb 数据库。

Source  : MSSQL$SQLEXPRESS
Message : 服务器正在侦听 ['any' <ipv4> 57964]。

Source  : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'msdb'。

Source  : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'model'。

Source  : MSSQL$SQLEXPRESS
Message : 正在启动数据库 'mssqlsystemresource'。

Source  : MSSQL$SQLEXPRESS
Message : 恢复操作正在数据库 'master' (1)中写入检查点。这只是一条信息性消息,不
          需要用户执行任何操作。

<SPACE> next page; <CR> next line; Q quit


Where-Object后面的就是查询的表达式,你可以跟据你的需要来构造,Format-List后面跟上列表项,可列出你想列的信息,信息也会全部给列出来,最后的more是用来分屏显示的。如果你愿意,可以将输出信息重定向到一个文件里,方便你来查看。


要提取具有特定类型的事件日志条目,请使用 InstanceID 参数。例如,要在安全事件日志 (ID 4624) 中查看最近 10 个成功登录事件,请运行以下命令:
Get-EventLog -LogName Security -InstanceID 4624 -Newest 10

Get-EventLog 是一个非常有用的 cmdlet,在使用 Server Core 机器时,或者如果您只是想检查您管理的计算机上是否发生了特定事件,您肯定会使用它。 


以下相关命令,在查询需求上并不特别友好:
powershell管理员执行
列出安全日志 Get-WinEvent -FilterHashtable @{logname="Security";}
列出系统日志 Get-WinEvent -FilterHashtable @{logname="System";}
列出应用程序日志 Get-WinEvent -FilterHashtable @{logname="Application";}




导出 安全 日志的命令为:
wevtutil epl security d:\security.evtx
该命令将安全日志信息导出到d盘下的security.evtx文件

wevtutil命令的其他参数:
wevtutil el             列出系统中所有日志名称
wevtutil cl system      清理系统日志
wevtutil cl application 清理应用程序日志
wevtutil cl security    清理安全日志


其中,poweshell可以使用以下命令清理日志:
Clear-Eventlog -Log Application, System,Security





本文由“超专业的IT基础架构经验分享 > 管理员”整理编辑。


未注明为原创的文章以及每篇文章的评论内容都不代表本站观点,本站不对此内容的真实性及言论负责。如您发表评论意见,视为同意本站记录言论您的来源IP地址信息及发表时间。

如果喜欢这篇文章,欢迎订阅超专业的IT基础架构经验分享以获得最新内容。

已经有 0 条群众意见