PowerShellでPCのイベントログを表示

背景

会社での勤怠管理などで、PCの起動時間・停止時間をもとに業務時間を決定している会社は多くあると思います。私の会社では、基本的にはPCの起動・停止時間は自動でシステムに登録されて、勤怠管理がしやすいような仕組みが備わっています。しかし、出張時や在宅時など、直接会社のネットワークに接続できない環境の場合は自分でPCの起動停止時刻を調べて申告する必要があります。
Windowsを使用している場合は、イベントビューアーを用いて起動時間や停止時間をログから特定する必要がありますが、毎回イベントビューアーを開いて特定のログを見つけるのは面倒です。
そこで、PowerShellを使用して自動でPCの起動・停止時刻を出力するスクリプトを作ってみました。

事前知識

Windows起動停止ログ

イベントビューアーに保存されるログは、それぞれにイベントIDと呼ばれる番号が割り振られています。Windowsの起動停止ログのイベントIDは以下の通りとなります。
・起動:ID:6005
・停止:ID:6006

PowerShellとは

PowerShellとは、Microsoft社が開発したスクリプト言語およびCUIの一つです。
複雑な命令や処理をスクリプトにすることができ、繰り返し作業などをPowerShellを用いて効率的に行うことができます。
Windowsには今まで、コマンドプロンプトというCUIが存在していましたが、現在ではコマンドプロンプトが抱える問題点を改良したものとしてPowerShellが標準搭載されています。
PowerShellでは従来のコマンドをわかりやすくした、コマンドレットというものを利用できます。コマンドレットは「動詞-名詞」という命令規則で作られており、従来よりも直感的にコマンドの内容を把握しやすいという特徴になっています。

PowerShellの実行

PowerShellを実行する際は、.ps1の拡張子を持ったスクリプトを使用することができます。
Windows10の初期状態ではスクリプトを実行できないので、管理者権限でPowerShellを開いて下記コマンドを実行してください。

Set-ExecutionPolicy RemoteSigned

RemoteSignedの実行ポリシーは、このPCで作成したスクリプトは実行可能で、インターネットからダウンロードしたスクリプトは署名がある場合のみ実行可能といいうポリシーとなっています。

Eventlogs

イベントビューアーに表示されるログは、PowerShellのGet-EventLogというコマンドレットを使用することで表示させることができます。
文法や使用例に関しては、参考文献をご参照ください。

自動スクリプト

作成したスクリプトは以下の通りです。

$Date = Read-Host "Plese enter the Date you want to serch(ex:2022/10/15)"
$Date_before = ([datetime]"$Date").AddDays(1)
$Date_before = ([datetime]"$Date_before").AddSeconds(-1)
echo "PC start's log:"
Get-EventLog -LogName System -After "$Date" -Before "$Date_before"| Where-Object { $_.EventID -eq "6005" }
echo "PC exit's log:"
Get-EventLog -LogName System -After "$Date" -Before "$Date_before"| Where-Object { $_.EventID -eq "6006" }

標準入力として確認したい日付を入力すると、その日付のPC起動と停止に関するログが出力される仕様となっています。

実行結果

Plese enter the Date you want to serch(ex:2022/10/15): 2022/10/15
PC start's log:

   Index Time          EntryType   Source                 InstanceID Message
   ----- ----          ---------   ------                 ---------- -------
 3055114 10 15 15:00   Information EventLog               2147489653 イベント ログ サービスが開始されました。
PC exit's log:
 3055103 10 15 15:00   Information EventLog               2147489654 イベント ログ サービスが停止されました。

まとめ

今回はPCの起動停止ログを出力するという最低限の機能を持ったスクリプトを作成しましたが、これに様々な機能を拡張してつけることも可能だと思います。
PowerShellを初めて触ってみましたが、Microsoftの公式ページにもマニュアルは記載されていますので、学びやすいと思います。
今後も業務に必要なスクリプトなどできたらUploadしていきたいと思います。

参考

Windows イベントログID
Windows PowerShell コマンドレット
Windowd PowerShell about_Eventlogs

Shell

Posted by okuribito