Powershell 查询特定时间段之间的应用程序事件日志

Powershell 查询特定时间段之间的应用程序事件日志,powershell,event-log,Powershell,Event Log,我试图查询特定时间段的应用程序事件日志,以检查确认应用程序备份状态的特定事件。由于备份计划设置在晚上10:00到11:00之间,因此我正在尝试获取有关事件id 18264的信息 我使用: gwmi -computername somename -namespace root\cimv2 -query "Select EventCode from Win32_NTLogEvent where LogFile = 'Application' and EventCode = '18264'" 现在,

我试图查询特定时间段的应用程序事件日志,以检查确认应用程序备份状态的特定事件。由于备份计划设置在晚上10:00到11:00之间,因此我正在尝试获取有关事件id 18264的信息

我使用:

gwmi -computername somename -namespace root\cimv2 -query "Select EventCode from Win32_NTLogEvent where LogFile = 'Application' and EventCode = '18264'"

现在,我得到了不止一个输出。我想限制输出为1,这是基于最新的。例子;获取昨天晚上10点到11点之间的活动id。我看到一列写着时间的文章。有人能帮忙吗?谢谢

有用于读取事件日志的特定cmdlet,它们比使用WMI容易得多。例如

Get-WinEvent -ComputerName comp1,comp2 `
             -FilterHashtable @{LogName='application'; 
                                starttime=([datetime]::today.AddDays(-1)); 
                                endtime=([datetime]::Today);
                                id=1704}
(为清晰起见,添加了换行符)

这将返回昨天计算机
comp1
comp2
中的所有事件#1704。查看
Get WinEvent
FilterHashtable
参数(
Get help Get WinEvent-param FilterHashtable
)的帮助以了解更多搜索条件(例如,您可以传递多个日志名和ID)


还有一个
-MaxEvents
参数,用于将输出限制为若干事件。

您可以创建自定义XPath查询,该查询可在PowerShell、C#中进一步用于查询或查看事件日志

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[(Level=1  or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and (EventID=18264) and TimeCreated[timediff(@SystemTime) &lt;= 3600000]]]</Select>
  </Query>
</QueryList>

*[System[(Level=1或Level=2或Level=3或Level=4或Level=0或Level=5)和(EventID=18264)以及TimeCreated[timediff(@SystemTime)=3600000]]

此cmdlet仅适用于Windows Vista及以后版本。我忘了提到环境设置为XP和Server2003。所有服务器均为2003:(我使用的是PowerShell 2.0。@Rajiv:在这种情况下,请查看
获取事件日志-计算机名c1-日志名应用程序…
(有关参数的完整列表,请参阅帮助)。您需要使用
Where Object
按事件id进行筛选。