0

我正在开发一个应用程序,该应用程序使用基于轮询的方案定期从事件日志中读取事件。我正在使用 Get-WinEvent 命令通过使用 C# 代码调用此 powershell 命令来读取事件。

如果没有返回与指定为此 powershell 命令的 args 的过滤器匹配的事件,此 API 将引发异常

异常 -> Get-WinEvent :未找到符合指定选择条件的事件。

现在我面临区分以下两种情况的问题

  1. 日志中有一些事件,我的过滤参数错误,命令失败并出现异常
  2. 过滤器是正确的,但实际上没有要返回的事件,因此 API 失败并出现异常

在这两种情况下,例外似乎都是一样的。

有什么方法可以捕获案例 2 的特定异常,以便我可以安全地忽略它,对于过滤器查询中可能出现问题的其他情况,我可以正确处理它们吗?

我想的一种方式是基于异常消息,但它们看起来也相同。

我想做类似的事情

try
{
//Execute
}
catch(ExceptionOfType2 ex)
{
//ignore
}
catch(OtherException ex)
{
//Log
}
4

2 回答 2

0

如果这是一个轮询进程,并且您希望自上次轮询以来可能没有写入任何事件,为什么不使用 Get-WinEvent -ListLog 首先确定自上次轮询以来是否已写入日志。然后,当您知道应该有新记录要返回时,您可以运行查询。

于 2013-10-30T21:48:59.647 回答
0

如果您使用的是 .NET 3.5 或更高版本,则可以使用EventLogQuery 类和相关 API

public static EventRecord GetEventRecord(string eventFile, int eventID)
{
  string sQuery = string.Format("*[System/EventID={0}]", eventID);
  EventLogQuery query = new EventLogQuery(eventFile, PathType.FilePath, sQuery);
  EventLogReader reader = new EventLogReader(query);
  return reader.ReadEvent();
}
于 2013-10-30T21:20:39.513 回答