seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

PowerShellでイベントログを扱う方法

PowerShellでイベントログを解析する

PowerShellにはイベントログにアクセスする方法が用意されていて、
イベントログをオブジェクトとして扱うことができる。

セキュリティログを取得したら、そのオブジェクトに対してイベントIDでフィルタリングできる。

	$events = get-Eventlog security | where {$_.EventID -ge 529 -and $_.EventId -le 539}

結果オブジェクトの中身はフォーマットして文字列化できる。
(フォーマットの種類は他にもいろいろある。)

	$messages = $events | Format-List

イベントログのバックアップ、クリア

PowerShellからはイベントログのバックアップやクリアなどの操作は直接行えない。
なのでWMI経由でイベントログを取得し操作する必要がある。

# セキュリティログのバックアップ
function backupSecurityLog
{
	# セキュリティログを取得する
	$slog = gwmi "Win32_NTEventLogFile WHERE LogFileName = 'Security'"
	
	# 特権を有効化 (バックアップ・クリアの操作で必要)
	$slog.PSBase.Scope.Options.EnablePrivileges = $true

	# セキュリティログをバックアップする。(コンピュータ名 + LOG + 日付YYYYMMDD + .evt)
	$bakName = ${env:computername} + "LOG_" + (get-Date -uformat "%Y%m%d") + ".evt"
	$slog.BackupEventLog($bakName)
	
	# セキュリティログをクリアする。
	$slog.ClearEventLog
}

特権を有効にしないとバックアップ・クリアの操作は行えないことに注意。