目的

WindowsServerのDHCPログは一週間分しか保持されない。
仕様により曜日ごとにログが生成され、一週間経つと上書きされてしまう。
そのため一日一回前日のログを別フォルダに日付名で保存させることでログを保全する。

使い方

ログの保全先フォルダを作成(以下スクリプトではC:\Windows\System32\dhcp\を指定)
WindowsServerのタスクスケジューラで一日一回実行してください。

コード

Powershellで実装。

# 機能
# WindowsServerのDHCPログを別フォルダに一日一回コピーする
#
# 目的
# WindowsServerのDHCPログは一週間分しか保持されない。
# 曜日ごとにログが生成され、一週間経つと上書きされてしまう。
# そのため一日一回前日のログを別フォルダに日付名で保存させることでログを保全する。
#
# 使い方
# タスクスケジューラにこのバッチを一日一回セットする


## 参照先・保全先
$src_file_def = "C:\Windows\System32\dhcp\" # DHCPのデフォルトログの保存先
$dst_file_def = "C:\Windows\System32\dhcp\log\" # コピー先(保全先)のディレクトリ


## 前日の日付取得
$date = (Get-Date).AddDays(-1).ToString("yyyyMMdd");


## コピー先(保全先)のファイル名を生成
$dst_file = $dst_file_def + "$date" + ".log"

## コピー元のファイル名
$youbi = (Get-Date).AddDays(-1).DayOfWeek # 前日の曜日を取得
$youbi_3 = "$youbi".Substring(0,3) # 前日の曜日から頭3文字を抜き出す(Sunday→Sun)
$src_file = $filename_def + "DhcpSrvLog-" + $youbi_3 +".log"


#echo $src_file
#echo $dst_file

## コピーを作成
Copy-Item -Path $src_file -Destination $dst_file -Force

その他

急遽必要になったのでさっと作ったが、結局自分では使わなかったので、これが本当に使えるのか未検証です。
多分DNSログにも使えると思う。
WindowsのDHCPログで調べると「仕様がクソ」みたいな記事が出てくるけど、確かにそう思う。なんでこんな仕様なんだろうか。