なんてツッコミが飛んできそうですけど。。
いや、確かに使いますよ。げっといべんとろぐ。
とりあえず、こんな感じで欲しい情報は取得できます。
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 件のコメント:
コメントを投稿