<# .SYNOPSIS イベントログをエクスポートします。 .DESCRIPTION イベントログをエクスポートします。 .NOTES {$SCRIPT_HOME}\etc\Export-Eventlog.confにCSV形式で各種条件を設定してください。 書式 Name エクスポートするイベントログを指定します。 ExportDir エクスポートするフォルダー名を指定します。 ExportType 出力形式を指定します。現在は、次の形式に対応しています。 CSV : CSV形式です。 EVTX : イベントビューワ形式です。 .EXAMPLE C:\PS> .\Exec-Logrotate.ps1 .LINK http://www. #> <# **************************************************************************** * 引数設定 *************************************************************************** #> [CmdLetBinding()] param ( ) <# **************************************************************************** * 環境設定 *************************************************************************** #> # ***** 環境フォルダ設定 $HSC_HOME = Convert-Path -Path (Join-Path -Path (Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent) -ChildPath ..\) # スクリプトの一つ上のフォルダーをHOMEに設定 $HSC_BIN = Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent # スクリプトの存在するフォルダーをBINに設定 $HSC_ETC = Join-Path -Path $HSC_HOME -ChildPath \etc -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LIB = Join-Path -Path $HSC_HOME -ChildPath \lib -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_TMP = Join-Path -Path $HSC_HOME -ChildPath \tmp -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LOG = Join-Path -Path $HSC_HOME -ChildPath \log -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_VAR = Join-Path -Path $HSC_HOME -ChildPath \var -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す # ***** 各種ファイル設定 $HSC_EPPlus = Join-Path -Path $HSC_LIB -ChildPath \EPPlus.dll $HSC_ETCFILE = Join-Path -Path $HSC_ETC -ChildPath \Export-Eventlog.conf -Resolve $HSC_LogPrefix = $Script:myInvocation.MyCommand.Name # 共通関数呼出 .$HSC_LIB\HSC-SharedFunction.ps1 # Transcriptの発行 $HSC_DetailLogfile = Join-Path -Path $HSC_LOG -ChildPath ($HSC_LogPrefix + '-Detail_' + (Get-Date -Format 'yyyyMMdd') + '.log') Start-transcript -Path $HSC_DetailLogfile -Append # 前日を取得 $HSC_GETDATE = Get-Date (Get-Date).AddDays(-1).Date -Format "yyyyMMdd" $HSC_CSV_GETDATE = Get-Date (Get-Date).AddDays(-1).Date -Format "yyyy/MM/dd" $HSC_EVTX_FROMDATE = Get-Date (Get-Date).AddDays(-2).Date -Format "yyyy-MM-dd" $HSC_EVTX_TODATE = Get-Date (Get-Date).AddDays(-1).Date -Format "yyyy-MM-dd" # 設定ファイル読み込み $HSC_ETC_Datas = Get-Content -Path $HSC_ETCFILE -Encoding Default | ConvertFrom-Csv # 処理開始メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* イベントログのエクスポートを開始します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') <# **************************************************************************** * メイン *************************************************************************** #> foreach ($HSC_ETC_Data in $HSC_ETC_Datas) { # アーカイブファイル名の生成 $HSC_ArchiveFile = $HSC_ETC_Data.ExportDir + "\" + $HSC_ETC_Data.Name + "-" + $HSC_GETDATE + "." + $HSC_ETC_Data.ExportType # エクスポート対象情報出力 HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('対象イベントログ :' + $HSC_ETC_Data.Name) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力フォルダー :' + $HSC_ETC_Data.ExportDir) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力タイプ :' + $HSC_ETC_Data.ExportType) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力対象日付 :' + $HSC_CSV_GETDATE) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力ファイル名 :' + $HSC_ArchiveFile) # アーカイブフォルダーを作成 if (-not(Test-Path -Path $HSC_ETC_Data.ExportDir)) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力フォルダー' + $HSC_ETC_Data.ExportDir + 'を作成します。') $HSC_MKDIR_Result = New-Item -Path $HSC_ETC_Data.ExportDir -ItemType Directory HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_MKDIR_Result | Out-String) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力フォルダー' + $HSC_ETC_Data.ExportDir + 'を作成しました。') } # イベントログのアーカイブ switch ($HSC_ETC_Data.ExportType) { # EVTX形式の処理 "EVTX" { if (Test-Path -Path $HSC_ArchiveFile) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力ファイル ' + $HSC_ArchiveFile + ' が存在します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ArchiveFile + ' を削除します。') Remove-Item -Path $HSC_ArchiveFile -Force HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ArchiveFile + ' を削除しました。') } HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートを開始します。') # WEVTUTILはUTCで時間を扱うためJSTからの時間差を考慮すること $HSC_EVTX_QUERY = "*[System[TimeCreated[@SystemTime >= '" + $HSC_EVTX_FROMDATE + "T15:00:00.000Z' and @SystemTime <= '" + $HSC_EVTX_TODATE + "T14:59:59.999Z']]]" WEVTUTIL export-log $HSC_ETC_Data.Name $HSC_ArchiveFile /q:"$HSC_EVTX_QUERY" HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートが終了しました。') break } # CSV形式の処理 "CSV" { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートを開始します。') Get-EventLog -LogName $HSC_ETC_Data.Name -After "$HSC_CSV_GETDATE 00:00:00" -Before "$HSC_CSV_GETDATE 23:59:59" ` | Select-Object -Property TimeGenerated, EntryType, EventID, Category, CategoryNumber, Source, Message, MachineName, Username, Site, Container ` | Export-Csv -Path $HSC_ArchiveFile -Encoding Default -NoTypeInformation HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートが終了しました。') break } # 未対応の指定 default { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('指定された形式 ' + $HSC_ETC_Data.ExportType + ' には対応していません。') } } } # 処理終了メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* イベントログのエクスポートを終了します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') # Transcriptの停止 Stop-Transcript