有没有办法使用Get-WMIObject和win32_ntlogevent类从系统事件日志中提取最近的3个错误事件?
$log = Get-WMIobject -ComputerName $server -Credential $cred -class win32_ntlogevent -filter "(logfile='system') AND (type='error')"
我知道Get-EventLog
有一个-Newest
选项,但我没有看到类似WMI的内容
答案 0 :(得分:1)
想出来
$log | sort TimeGenerated | select -last 3
答案 1 :(得分:1)
请勿使用WMI。您的方法将从远程主机检索所有错误事件(这可能需要相当长的时间),然后在本地主机上拥有所有内容后丢弃除最新3之外的所有错误事件。使用Get-EventLog
并在源处进行过滤:
Get-EventLog -LogName 'System' -EntryType 'Error' -Newest 3
答案 2 :(得分:0)
我不认为Wmi查询支持限制结果。
如果您迫切希望使用您的命令,这是获得预期输出的最低效方式 -
Get-WMIobject win32_ntlogevent -filter "(logfile='system') AND (type='error')" | select -first 3
干杯, G
答案 3 :(得分:0)
Get-EventLog -LogName 'System' -EntryType 'Error' -Newest 3
WMI是更有效的方式,它返回日志名称
$dt = $cdt = Get-Date;$CUmonth = (get-date).adddays(-30);$eventId = Get-EventLog -ComputerName $SystemlogFqdn -LogName 'System' -EntryType 'Error','Warning' -After $CUmonth;"GetMethod: $((New-TimeSpan $dt ($dt = get-date)).totalseconds)"
GetMethod:163.585552
$dt = $cdt = Get-Date;PS C:\Users\User> $CUmonth = (get-date).adddays(-30);PS C:\Users\User> $eventID = Get-WmiObject Win32_NTLogEvent -ComputerName $SystemlogFqdn -filter "(logfile='system' AND Type <> 'Information' AND TimeWritten >= '$CUmonth')";PS C:\Users\User> "WMIMethod: $((New-TimeSpan $dt ($dt = get-date)).totalseconds)"
WMIMethod:63.49941