我有一個Powershell腳本,它使用Get-EventLog
在遠程服務器上搜索事件6005
,6006
和6008
;經過一些操作後,它將返回數組中的結果。Powershell:將陣列拆分成對並丟棄,如果不交替
$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 down 0
2014年8月3日上午五點30分47秒6005向上0
2014年8月24日上午05時31分00秒6005向上0
2014年8月31日上午02時34分59秒6008向下1
2014年8月31日上午05時30分04秒6006下跌0
2014年8月31日上午05時三十分59秒6005了0
2014年8月31日上午05時36分26秒6005了0
我怎樣才能從這些結果創建一個新的數組,並安排TimeGenerated
上/下對?如果它是up
(所以總是有down
,然後up
成對),我寧願忽視陣列的第一個事件,但我可以解決這個問題。如上面的示例輸出一樣,永遠不會有兩個連續的down
或up
事件更爲重要。
我想通過事件也許迭代和切換1
和0
(或up
和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
你可以發佈一個你想要的結果的例子嗎?給定發佈的輸入數據? – mjolinor 2014-09-29 20:33:43
我剛剛編輯了我的問題以包含此內容。謝謝。 – kiwisan 2014-09-29 20:42:48
你只是在尋找有多久了?就像在8/31/2014 05:30:04 AM時一樣,在2014年8月31日05:30:59回來了?這應該是可行的。 – TheMadTechnician 2014-09-29 20:43:40