初心者も簡単ブログにコピペだけ!1クリック高単価7〜42円。登録無料最短1分でスタート。

powershellでwindowsイベントログを抽出する方法。

Windowsのイベントログを抽出するスクリプトの紹介

windows powershellについてですが、いろいろオブジェクトでガシガシできるシェルです。以前のバッチファイルなどはとても書きずらくめんどうでしたが、windows powershellでは何でもかんでもオブジェクトとして扱うので楽です。

ただ、ちょっと動作が遅いのが欠点な気もします。

今回は、windowsのイベントログから対象に一致するログを抜き出すサンプルスクリプトを紹介します。

想定しているログ抽出対象ディレクトリは下記の通り。

※ディレクトリ1〜5内のwindowsイベントログApplication.evtxを再帰的に抽出して目的ののログが含まれてるか確認する。

1\Application.evtx
2\Application.evtx
3\Application.evtx
4\Application.evtx
5\Application.evtx

はじめに

1:対象ファイルはApplication.evtx これはwindowsのイベントログファイルです。

2:スクリプトファイルの拡張はps1です。

3:実行するときは管理者権限で実行します。デフォルトで全てのps1スクリプトの実行は許可されていません。

4:エディタはwindows標準のメモ帳でもいいですが、せっかくのなのでwindows powershell ISEを使用しましよう。保管もしてくれるので作業がはかどります。

5:Windowsイベントログのパスは下記の通り。
C:\Windows\System32\winevt\Logs\

windowsイベントログから抽出するサンプルスクリプト


$i=0

#ディレクトリ名取得

$hostName=Get-ChildItem -name

#ディレクトリ内の.evtxを再帰的に取得

$logFiles=Get-ChildItem -name -recurse -include *.evtx

#抽出したいid

$id=16

#抽出したいプロバイダネーム

$providerName='SecurityCenter'

#抽出対象時間 現在時刻より10時間前

#$today=(get-date).AddHours(-10)

#当日の17:15:00

$today=get-date -Format "yyyy/MM/dd 17:15:00"

#ログ抽出した日時を出力

get-date | out-string >> log.txt

foreach($tmpPath in $logFiles){

$logArray=Get-WinEvent -PATH $tmpPath | Where-object{$_.ID -eq $id -AND $_.ProviderName -eq $providerName -AND $_.TimeCreated -gt $today}

if($logArray -eq $null){

write-host $hostName[$i] "スキャンは開始されていません。"

$error[$i]= "NG " + $hostName[$i]  +  "スキャンは開始されていません。"

$error[$i] >> log.txt

}else{

$line="OK " + $hostName[$i]  + " " + [string]$logArray[0].TimeCreated + " " + [string]$logArray[0].ID + " " + [string]$logArray[0].ProviderName

echo $line

$line >> log.txt

}

$i=$i+1

}

上記のような処理で目的のログを抽出することが可能です。

ダイレクト特集ページ用バナー(ダウンロード版)

初心者も簡単ブログにコピペだけ!1クリック高単価7〜42円。登録無料最短1分でスタート。