Skip to content

Instantly share code, notes, and snippets.

@kitakita
Created June 4, 2012 10:51
Show Gist options
  • Save kitakita/2867731 to your computer and use it in GitHub Desktop.
Save kitakita/2867731 to your computer and use it in GitHub Desktop.
セキュリティログを取得する PowerShell 2.0 スクリプト
# セキュリティログを取得する 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