イベントビューアで7001(起動)、7002(シャットダウン)を指定すれば、おおよその出勤退勤時刻が把握できると以前お話ししたことがありますが、イベントビューアを起動したりフィルターするのが面倒なので、バッチでファイル化する方法をご紹介します。
まずはソースコードです。これをコピーしてください。
$startDate = (Get-Date).AddMonths(-1).Date.AddDays(-(Get-Date).Day + 1)
$endDate = Get-Date
$EventIDs = 7001, 7002
$logs = Get-WinEvent -FilterHashtable @{LogName='System';ID=$EventIDs;StartTime=$startDate;EndTime=$endDate}
$startupEvents = $logs | Where-Object { $_.Id -eq 7001 }
$shutdownEvents = $logs | Where-Object { $_.Id -eq 7002 }
$results = @()
$groupedStartupEvents = $startupEvents | Group-Object { $_.TimeCreated.Date }
$groupedShutdownEvents = $shutdownEvents | Group-Object { $_.TimeCreated.Date }
ForEach ($group in $groupedStartupEvents) {
$startupDate = $group.Group[0].TimeCreated.Date.ToShortDateString()
$startupTime = ($group.Group | Sort-Object TimeCreated | Select-Object -First 1).TimeCreated.ToString("HH:mm")
$shutdownTime = $null
$sameDayShutdownGroup = $groupedShutdownEvents | Where-Object { $_.Name -eq $group.Name }
if ($sameDayShutdownGroup) {
$shutdownTime = ($sameDayShutdownGroup.Group | Sort-Object TimeCreated | Select-Object -Last 1).TimeCreated.ToString("HH:mm")
}
$results += [PSCustomObject]@{
Date = $startupDate
StartupTime = $startupTime
ShutdownTime = $shutdownTime
}
}
$results | Export-Csv -Path eventlogs.csv -NoTypeInformation
次に手順です。
- メモ帳を開く
- ソースコードを貼り付ける
- event.ps1という名前でデスクトップに保存する
以上です。拡張子をps1にしていただければ、ファイル名は好きなものでOKです。
実行するときは右クリックして「PowerShellで実行」をクリックします。
するとデスクトップにeventlogs.csvというファイルができるはずです。
今日は9月1日ですが、こんな感じで8月1日(前月の1日)~9月1日(現在)までの日付、起動時刻、シャットダウン時刻が作られるはずです。
なぜ前月の1日を開始日にしているのかと言うと、こういうのって出勤日報などの用途で、月が締まった翌月の初旬に前月分を作るものだからです。
なので、開始はソースコード1行目の
$startDate = (Get-Date).AddMonths(-1).Date.AddDays(-(Get-Date).Day + 1)
を直せば応用は利きます。
ご参考になれば幸いです。
コメント