PowerShell(事件日志:如何比较日期/时间?)



到现在为止我从未使用过PowerShell,但现在我必须使用。(别担心,我知道如何用其他语言编程。)

我要做的:

有两个事件日志:"EventID = 3317,事件级别=错误"one_answers"EventID = 3317,事件级别=信息"

如果有一个级别为"Error"的事件,而之后没有级别为"Information"的事件,那么输出必须是"Critical"。如果在这个级别为"错误"的事件之后有一个级别为"信息"的事件,那么输出必须是"Ok"。(如果没有该ID的事件,一切都是"Ok")

现在的问题是,我不知道如何比较我从这些行得到的两个日期值…

get-eventlog -log application -EntryType error  –newest 1 | where {$_.eventID -eq 3317}
get-eventlog -log application -EntryType information  –newest 1 | where {$_.eventID -eq 3317}

也欢迎其他解决方案。;)

问候,塞德里克

编辑(代码):

#Error:
$e_error = (get-eventlog -log application -EntryType error | where {$_.eventID -eq 3317} | Select -First 1).TimeGenerated
write-host "Error:       $e_error"
#Information:
$e_info = (get-eventlog -log application -EntryType information | where {$_.eventID -eq 3317} | Select -First 1).TimeGenerated
write-host "Information: $e_info"
if (($e_error) -and ($e_info)) {  #If $e_error (Error) & $e_info (Information) are not empty (events exists)
  $timediff = (new-timespan –start $e_error -end $e_info).TotalSeconds  #Difference
  if ($timediff -gt 0) {  #If $e_info (Information) newer than $e_error (Error)
    $res = "Ok"
  } else {  #If one of them or both are empty
    $res = "Critical"
  }
} else {
  if (($e_error) -and (!($e_info))) {  #If $e_error (Error) exists but not $e_info (Information)
    $res = "Critical"
  } else {  #If non of both or only Information exists
    $res = "Ok"
  }
}
write-host $res

TimeWritten或TimeGenerated值将为您提供日期和时间进行比较…

get-eventlog -log application -EntryType error  –newest 1 | where {$_.eventID -eq 3317} | Select TimeGenerated, TimeWritten

你也可以这样做来拉出属性

(get-eventlog -log application -EntryType error  –newest 1 | where {$_.eventID -eq 3317}).TimeGenerated

我的另一个建议是在选择最后一个错误之前过滤事件。否则,如果快速连续出现另一个错误,您可能会错过一个条目。因此,您的查询的基础应该是这样的:

get-eventlog -log application -EntryType error  | where {$_.eventID -eq 3317} |  | Select -First 1

最新更新