到现在为止我从未使用过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