Created
June 4, 2012 10:51
-
-
Save kitakita/2867731 to your computer and use it in GitHub Desktop.
セキュリティログを取得する PowerShell 2.0 スクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# セキュリティログを取得する PowerShell 2.0 スクリプト | |
# 署名なしで使用するには get-help about_signing を参照のこと | |
# | |
# 使用例:ユーザー名 DOMAIN\Administrator のセキュリティログを C:\log\ に 10 日間分保存する | |
# ファイル名は "AdmSecLog_2012年XX月YY日.log" とする | |
# | |
# powershell セキュリティログ.ps1 -username "DOMAIN\Administrator" -dir "C:\log\" -term 10 -prefix "AdmSecLog_" | |
# | |
# !注意! $dir の最後には\をつけること | |
# | |
# パラメータの取得 | |
param($username="DOMAIN\*", $dir="C:\", $term=30, $prefix="SecurityLog_") | |
#---------- | |
# Get-LogFilePath | |
# n 日前のログのファイルパス文字列を生成して返却 | |
#---------- | |
function Get-LogFilePath($n) { | |
# 保存するファイルパスを生成 | |
$date = Get-Date -Format yyyy年MM月dd日 ((Get-Date).adddays(-$n)) | |
return $dir + $prefix + $date.toString() + ".log" | |
} | |
#---------- | |
# Get-SecurityLog | |
# n 日前の Security ログを保存する | |
# Get-EventLog の条件を変えることで色々なログを取得できる | |
#---------- | |
function Get-SecurityLog($n) { | |
$savepath = Get-LogFilePath $n | |
# n 日前の 00:00:00 ~ 23:59:59 までの日時オブジェクトを作成 | |
$after = Get-Date -Hour 0 -Minute 0 -Second 0 ((Get-Date).adddays(-$n)) | |
$before = Get-Date -Hour 23 -Minute 59 -Second 59 ((Get-Date).adddays(-$n)) | |
# イベントログの取得 | |
Get-EventLog Security -UserName $username -Before $before -After $after | Export-Csv $savepath -Encoding default | |
} | |
#---------- | |
# Log-Clear | |
# n 日前の Security ログを削除する | |
#---------- | |
function Log-Clear($n) { | |
Write-Host ($n.toString() + "日より前のログを削除しています...") | |
# 削除対象ファイルを検索 | |
$delfiles = Get-ChildItem -Path $dir | Where-Object { | |
$_.name -like ($prefix + "*.log") -and $_.name -lt ($prefix + (Get-Date).adddays(-$n).toString("yyyy年MM月dd日") + ".log") | |
} | |
# 削除対象ファイルがある場合に削除を実行 | |
if ($delfiles -ne $null) { | |
$delfiles | ForEach-Object { | |
# ファイルを削除 | |
$_ | Remove-Item | |
Write-Host ($_.Name + " を削除しました。") | |
} | |
Write-Host ("ログファイルを " + $delfiles.Length + "個 削除しました。") | |
} else { | |
Write-Host ("削除対象のログはありませんでした。") | |
} | |
} | |
# | |
# メイン処理 | |
# | |
# 処理開始 | |
Write-Host ("処理開始: " + (Get-Date -Format "yyyy年MM月dd日 HH:mm:ss")) | |
# 昨日のログを取得 | |
Write-Host ("昨日のログを取得します...") | |
Get-SecurityLog 1 | |
Write-Host ("昨日のログを取得しました。") | |
# 指定期間(term日間)のログが存在するかチェック | |
for ($i = 2; $i -le $term; $i++) { | |
$checkpath = Get-LogFilePath $i | |
Write-Host ("[" + $i + "日前] ファイル: " + $checkpath + " を探しています..." ) | |
if (-not(Test-Path $checkpath)) { | |
Write-Host ("[" + $i + "日前] ファイル: " + $checkpath + " が見つかりませんでした。ログの取得を試みます。" ) | |
# ログが見つからない場合は取得する | |
Get-SecurityLog $i | |
} else { | |
Write-Host ("[" + $i + "日前] ファイル: " + $checkpath + " が見つかりました。") | |
} | |
} | |
# term日より前のログを削除する | |
Log-Clear $term | |
# 処理終了 | |
Write-Host ("処理終了: " + (Get-Date -Format "yyyy年MM月dd日 HH:mm:ss")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment