なんてツッコミが飛んできそうですけど。。
いや、確かに使いますよ。げっといべんとろぐ。
とりあえず、こんな感じで欲しい情報は取得できます。
Get-EventLog -ComputerName 192.168.0.1 -LogName "Application" | Select-Object EntryType,EventID,Source,TimeGenerated,Message
そして今回のお客様のご要望は以下。
- 何日前までとか指定したい
- さっと見れるようにテキストに結果吐いて
ということで、こんな感じで実装しました。
$IpAddress = "192.168.0.1" $EventLogName = "Application" $StartDate = Get-Date $EndDate = $StartDate - (New-TimeSpan -day 6) $file = "C:\" + $EventLogName + ".txt" #イベントログ取得 function getEventLog ($IpAddress,$EventLogName,$StartDate,$EndDate,$file) { #イベントログ取得 $logArray = Get-EventLog -Computername $IpAddress -logname $EventLogName -after $EndDate -before $StartDate | Select-Object EntryType,EventID,Source,TimeGenerated,Message #期間内のイベントログが無い場合は、ファイルにログ無しと書き込む if ($null -eq $logArray) { $message = "イベントログがありません。 期間:" + $startdate + " ~ " + $enddate $message | Out-File -Filepath $file } else { #取得したイベントログをファイルに書き込む foreach ($row in $logArray) { #Messageに入っている改行コードを変換 $workMessage = [string]$row.Message.Replace("`n"," ") #日付の書式を整形 $workTimeGenerated = [string]$row.TimeGenerated.ToString("yyyy/MM/dd HH:mm:ss") #一行としてまとめる $line = $workTimeGenerated + "`t" + [string]$row.EntryType + "`t" + [string]$row.EventID + "`t" + [string]$row.Source + "`t" + $workMessage #ファイルに書き込む $line | Out-File -Filepath $file -Append } } #ファイルの存在チェックをして終了 if (Test-Path $file) { #ログを出力 Write-Host $file "を作成しました。" } } #実行 getEventLog $IpAddress $EventLogName $StartDate $EndDate $file
ガッと取ってきて一行づつ取り出して、日付を整形して、本文の改行コードを変換してテキストに追記していってます。
0 件のコメント:
コメントを投稿