我有一个 Powershell 脚本,用于在远程服务器上Get-EventLog
搜索事件6005
、、6006
和;6008
经过一些操作后,它以数组的形式返回结果。
$eventData += Get-EventLog -computerName $server_name -LogName system `
-After $prevMonthBegin -Before $prevMonthEnd |
Where-Object `
{ $_.eventid -eq 6005 -OR $_.eventID -eq 6006 -OR $_.eventID -eq 6008 } |
Select timegenerated, eventid, message, index, recordid | sort-object timegenerated
我遍历结果,然后将其中一个down
或分配up
给该$eventData.message
字段并再次对其进行排序timegenerated
返回一个像这样的数组(为格式化道歉):
$eventData | Sort-Object timegenerated | format-table
TimeGenerated EventID 消息索引
------------- ------- ------- ----- --------
8/3/2014 5 :30:02 AM 6006 向下 0
8/3/2014 5:30:47 AM 6005 向上 0 8/24/2014
5:31:00 AM 6005 向上 0
2014 年 8 月 31 日上午2:34:59 6008 下降 1 2014 年 8 月 31
日上午 5:30:04 6006 下降 0 2014 年 8
月 31 日上午 5:30:59 6005 上升 0 2014 年8 月 31
日 5:36 :26 AM 6005 向上 0
如何从这些结果中创建一个新数组并将它们排列成TimeGenerated
上/下对?如果数组的第一个事件是一个,我宁愿忽略它up
(所以总是成对出现),但我down
可以up
解决这个问题。更重要的是永远不要有两个连续的down
或up
事件,如上面的示例输出所示。
我在考虑可能遍历事件并在1
and 0
(或up
and down
)之间切换临时变量,但这似乎很笨拙,我无法使任何工作。这不应该这么难,但这就是我寻求帮助的原因。让我知道提供更多代码是否有用;它有很多,我不想只是转储它的页面。
这是我想要的数组格式的示例。我使用的方法将这些事件配对为 12121212,而无需查看它们是什么类型的事件。所以在上面的例子中,最后一个事件对将计算它不存在的停机时间,因为有两个up
(6005) 事件。
Downtime Uptime CrashEvent?
8/3/2014 5:30:02 AM 8/3/2014 5:30:47 AM 0
8/24/2014 5:31:00 AM 8/31/2014 2:34:59 AM 0
8/31/2014 2:34:59 AM 8/31/2014 5:30:04 AM 1
8/31/2014 5:30:59 AM 8/31/2014 5:36:26 AM 0