月末に勤務表を書く時、出勤時刻や退勤時刻が知りたくなりますよね。
そんな貴方のために、以下のコマンドをPowerShellで実行することをお勧めします。
Get-EventLog System -After "2019/08/01"| ? {$_.InstanceId -eq "7002" -or $_.InstanceId -eq "7001"} | select InstanceID,TimeGenerated | sort -Property TimeGenerated | Out-String | % { $_ -replace "7001","ログオン" } | % { $_ -replace "7002","ログオフ" }
解説
Windowsのイベントの一覧を取得しよう
このコマンドですがWindowsのイベントログのうち、2019/8/1以降のものを取得しています。
Get-EventLog System -After "2019/08/01"
でも、この一覧じゃあ、関係ないログまでいっぱい出力されてよくわからないですよね。
知りたいのはログオンとログオフだけ
次に?(Where-Object)を使用して、インスタンスIDが7001(ログオン)、7002(ログオフ)のものを取得しましょう。
Get-EventLog System -After "2019/08/01" | ? {$_.InstanceId -eq "7002" -or $_.InstanceId -eq "7001"}
これでログオンとログオフだけになりました。
でもこれ、IndexやらEntryTypeやら、いらない項目があって見にくいし、日時の降順なのもいただけませんよね。
欲しいのは何のイベントなのかと日時だけ
select(Select-Object)を使用して、余計な項目を省きインスタンスIDと日時のみを取得しましょう。
Get-EventLog System -After "2019/08/01"| ? {$_.InstanceId -eq "7002" -or $_.InstanceId -eq "7001"} | select InstanceID,TimeGenerated
うん、大分見やすくなりましたね。
次は日時の昇順にソートしよう
sort(Sort-Object)を使用して、並べ替えてます。
Get-EventLog System -After "2019/08/01"| ? {$_.InstanceId -eq "7002" -or $_.InstanceId -eq "7001"} | select InstanceID,TimeGenerated | sort -Property TimeGenerated
もうこれでもいい気がしますが、7001や7002はちょっと不親切かな。
7001や7002をログオン、ログオフに置換しよう
最後に、Out-Stringで文字列に変換した後、%(ForEach-Object)を使用して、7001、7002の部分をログオン、ログオフに置換
Get-EventLog System -After "2019/08/16"| ? {$_.InstanceId -eq "7002" -or $_.InstanceId -eq "7001"} | select InstanceID,TimeGenerated | sort -Property TimeGenerated | Out-String | % { $_ -replace "7001","ログオン" } | % { $_ -replace "7002","ログオフ" }
これで完璧。
後書き
え、Windows使ってない?
PCつけっぱなしで帰ってる?
すみません。自分で何とかしてください。