为什么会有Get-EventLog和Get-WinEvent两条命令?Get-EventLog能查询到的,能用Get-WinEvent查到吗?反之呢?是不是事件日志中记录的所以事件都能通过Get-EventLog获取?
从MSDN的解释来看
- Get-EventLog
获取本地或远程计算机上的事件日志或事件日志列表中的事件。 - Get-WinEvent
从本地和远程计算机上的事件日志和事件跟踪日志文件中获取事件。
从这一点来看Get-WinEvent比Get-EventLog的功能更广泛,多了一个“事件跟踪日志”。
从命令返回的对象来看
- Get-WinEvent返回的是System.Diagnostics.Eventing.Reader.EventLogRecord
- Get-EventLog返回的是System.Diagnostics.EventLogEntry
比如我想查看近期系统的开机和关机时间。
用Get-EventLog 出错
PS> Get-EventLog System -InstanceId 6005
Get-EventLog : 未找到匹配项
所在位置 行:1 字符: 1
+ Get-EventLog System -InstanceId 6005
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [Get-EventLog], ArgumentException
+ FullyQualifiedErrorId : GetEventLogNoEntriesFound,Microsoft.PowerShell.Commands.GetEventLogCommand
用Get-WinEvent则可以
PS> Get-WinEvent -FilterHashtable @{Logname='system';Id='6005'} ProviderName:EventLog TimeCreated Id LevelDisplayName Message ----------- -- ---------------- ------- 2014/8/19 19:13:45 6005 信息 事件日志服务已启动。 2014/8/17 9:52:32 6005 信息 事件日志服务已启动。
本文链接: https://www.pstips.net/diff-in-get-eventlog-and-get-winevent.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
Get-EventLog 的关键字过滤只支持InstanceID属性,不支持EventID,两者并不完全等同。
要使用Get-EventLog查询6005事件,对应InstanceID为 2147489653,所以应该写为:
Get-EventLog -LogName System -InstanceID 2147489653
Get-WinEvent则是支持EventID属性过滤的。