【ツール作成】PCの起動時間とシャットダウン時間を記録するツールを作ってみた

プログラミング
広告
広告

皆さんこんにちは!

PCの使用履歴を把握するために、起動時間とシャットダウン時間を記録したいことはありませんか?

今回は、WindowsでバッチファイルとPowerShellスクリプトを使って、PCの起動時間とシャットダウン時間を記録する方法をご紹介します。

広告
広告

プログラムの特徴

  • 簡単に実行:このプログラムはバッチファイルをダブルクリックするだけで実行できます。
  • カスタマイズ可能:指定した回数分のログを取得することができます。必要に応じて調整可能です。
  • ログの保存:ログは自動的にフォルダに保存され、後から確認することができます。
  • 日付付きログファイル:ログファイル名には自動的に実行日の日付が追加されます(yyyyMMdd形式)。

プログラムの目的

このプログラムは、PCの使用状況を監視・記録するために設計されています。
特に以下のような用途に役立ちます。

  • 業務管理:職場でのPCの使用状況を把握し、業務効率を向上させるため。
  • セキュリティ管理:不正なアクセスや異常な使用を検知するため。
  • 個人利用:自身のPC使用習慣を把握するため。

対象となる人

このプログラムは、以下のような方々に向いています。

  • IT管理者:複数のPCの使用状況を一元管理したい方。
  • 企業の管理者:従業員のPC使用時間を把握し、業務効率を改善したい方。
  • 個人ユーザー:自分のPC使用履歴を記録し、自己管理を行いたい方。

作成ファイル

以下の2つのファイルを作成します。

  1. Get-SystemEvents.ps1 – PowerShellスクリプト
  2. log_activity.bat – バッチファイル

PowerShellスクリプト (Get-SystemEvents.ps1)

まず、起動時間とシャットダウン時間を取得するPowerShellスクリプトを作成します。このスクリプトは指定した回数分のイベントを取得し、ログとして出力します。

# 取得する回数を設定
$eventsCount = $args[0]

# 直近の起動とシャットダウンのイベントを取得
$lastBootEvents = Get-WinEvent -LogName System -FilterXPath "*[System[(EventID=6005)]]" -MaxEvents $eventsCount
$lastShutdownEvents = Get-WinEvent -LogName System -FilterXPath "*[System[(EventID=6006)]]" -MaxEvents $eventsCount

# 起動時間とシャットダウン時間を出力
Write-Output "Recent $eventsCount boot and shutdown events:"

# 起動時間を出力
foreach ($bootEvent in $lastBootEvents) {
    $bootTime = $bootEvent.TimeCreated
    Write-Output "Boot: $bootTime"
}

# シャットダウン時間を出力
foreach ($shutdownEvent in $lastShutdownEvents) {
    $shutdownTime = $shutdownEvent.TimeCreated
    Write-Output "Shutdown: $shutdownTime"
}

Write-Output "Completed"

このスクリプトは、システムイベントログから起動(イベントID 6005)とシャットダウン(イベントID 6006)の情報を取得します。

バッチファイル (log_activity.bat)

次に、PowerShellスクリプトを実行し、結果をログファイルに保存するバッチファイルを作成します。

@echo off
REM バッチファイルの実行ディレクトリを取得
set "logDir=%~dp0\logs"

REM ログフォルダが存在しない場合は作成
if not exist "%logDir%" (
    mkdir "%logDir%"
)

REM 現在の日付を取得し、yyyyMMdd形式にフォーマット
for /f "tokens=2 delims==" %%I in ('"wmic os get localdatetime /value"') do set datetime=%%I
set "date=%datetime:~0,4%%datetime:~4,2%%datetime:~6,2%"

REM ログファイルのパスを設定(yyyyMMdd形式の日付を追加)
set "logFile=%logDir%\activity_log_%date%.txt"

REM ユーザーからの入力で直近何回分のログを取得するかを取得
set /p eventsCount="直近何回分のログを取得しますか?: "

REM PowerShellスクリプトを実行し、結果をログファイルに追記
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%~dp0Get-SystemEvents.ps1" %eventsCount% > "%logFile%" 2>&1

REM 完了メッセージを表示
echo 処理が完了しました

REM コマンドプロンプトを一時停止
pause

このバッチファイルは、PowerShellスクリプトを実行し、結果をlogsフォルダ内の activity_log_yyyyMMdd.txt ファイルに保存します。また、ユーザーから取得する回数分のログを収集します。

使用方法

  1. 上記のPowerShellスクリプトを Get-SystemEvents.ps1 として保存します。
  2. 上記のバッチファイルを log_activity.bat として保存します。
  3. log_activity.bat をダブルクリックして実行します。
  4. コマンドプロンプトで直近何回分のログを取得するか入力します。
  5. ログが生成され、コマンドプロンプトに「処理が完了しました」と表示されます。

結果の確認

実行後、logsフォルダ内に activity_log_yyyyMMdd.txt ファイルが作成され、指定した回数分の起動時間とシャットダウン時間が記録されます。

まとめ

バッチファイルとPowerShellを組み合わせることで、PCの起動時間とシャットダウン時間を簡単に記録することができました。よかったら業務の効率化や使用履歴の把握に役立ててください。

PowerShellについてもっと学びたいと思われる方は以下の書籍をおすすめします。
例題が多いので実務にも役に立ちます!

動くサンプルで学べるWindows PowerShellコマンド&スクリプティングガイドPowerShell 4.0対応

新品価格
¥3,035から
(2024/6/11 15:56時点)

人気ブログランキング

クリックするとブログランキングサイトに移動します。

にほんブログ村 IT技術ブログへ
インターネット・コンピュータランキング
広告
広告
プログラミング
広告
technyankoをフォローする
広告
プロフィール
technyanko

元情シス・SEです。
当ブログではPCに関して困ったことや役立つ情報を発信していきます。
たまにバッチスクリプトやPythonに関する記事も投稿します。

technyankoをフォローする
広告
タイトルとURLをコピーしました