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
orを割り当てて、再度並べ替えます。up
$eventData.message
timegenerated
$eventData | Sort-Object timegenerated | format-table
TimeGenerated EventID メッセージ インデックス
------------- ------- ------- ----- --------
8/3/2014 5 :30:02 AM 6006 ダウン 0 2014 年 8 月 3 日
5:30:47 AM 6005 アップ 0
2014 年 8 月 24 日 5:31:00 AM 6005 アップ 0
2014/8/31 2:34:59 AM 6008 ダウン 1
2014/8/31 5:30:04 AM 6006 ダウン 0
2014/8/31 5:30:59 AM 6005 アップ 0
2014/8/31 5:36 :26 AM 6005 アップ 0
TimeGenerated
これらの結果から新しい配列を作成し、上下のペアに配置するにはどうすればよいですか? 配列の最初のイベントが である場合は無視することをお勧めします (そのため、ペアにはup
常に存在します) が、これを回避することができます。上記の出力例のように、2 つの連続したorイベントが発生しないことがより重要です。down
up
down
up
イベントを反復処理して1
と0
(またはup
とdown
) の間で一時変数を切り替えることを考えていましたが、それは不格好なようで、何も機能しません。そんなに難しいことではないはずですが、それが私が助けを求めている理由です。より多くのコードを提供することが役立つかどうか教えてください。かなりの量があり、そのページを単にダンプしたくありませんでした。
これは、私が望む配列のフォーマットの例です。私が使用している方法では、これらのイベントを 12121212 としてペアにし、イベントの種類を調べません。up
したがって、上記の例では、2 つの(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