PowerShellを使ってシステムの最後のブートアップ時間を確認する方法という問いには、Win32_OperatingSystemのLastBootUpTimeを取得し、現在時刻との差からTimeSpanとして稼働時間を計算するという方法で答えます。LastBootUpTimeは現在のOSインスタンスの起動時刻を示す。イベントログは補助証拠であり、ログ消去や保存期間の影響を受ける。この記事では端末名、Win32_OperatingSystem.LastBootUpTime、LocalDateTime、取得時刻を同一レコードにするを判断軸にし、実行前の確認、記事固有のコード、合否判定、戻し方を一続きで示します。
PCの製造日時やユーザーログオン時刻ではなく、OSの今回の起動時刻を扱う。完了は「起動時刻が現在より過去で、稼働時間が非負となり、直近の起動関連イベントとも大きく矛盾しない」と定義します。対象が取れない場合は「CIM取得失敗ならリモート管理、権限、対象端末を確認し、イベント0件を『起動していない』と解釈しない」として切り分け、推測で成功扱いにしません。
LastBootUpTimeを基準にする
Win32_OperatingSystemのLastBootUpTimeを取得し、現在時刻との差からTimeSpanとして稼働時間を計算する。Windowsの最終起動時刻と稼働時間ではこの進め方により、操作したという事実ではなく、期待する状態へ到達したかでタイトルの問いへ答えられます。PCの製造日時やユーザーログオン時刻ではなく、OSの今回の起動時刻を扱う。
LastBootUpTimeを基準にするの合格条件は、起動時刻が現在より過去で、稼働時間が非負となり、直近の起動関連イベントとも大きく矛盾しないことです。作業時刻、実行ユーザー、端末名を添え、判断に使った値が後から追える形にします。
CIMからローカル時刻を取得
CIMからローカル時刻を取得は変更前の基準点です。端末名、Win32_OperatingSystem.LastBootUpTime、LocalDateTime、取得時刻を同一レコードにするを出力に含め、取得時刻と一緒に保存します。値だけを切り取ると別対象との比較になるため、識別列を省きません。
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime, LocalDateTime
LastBootUpTimeは現在のOSインスタンスの起動時刻を示す。イベントログは補助証拠であり、ログ消去や保存期間の影響を受ける。出力が多い場合も最初から無理に一件へ絞らず、候補数と除外理由を残してから対象を決めます。
稼働時間をDateTime差で計算
稼働時間をDateTime差で計算では、Windowsの最終起動時刻と稼働時間の対象を「端末名、Win32_OperatingSystem.LastBootUpTime、LocalDateTime、取得時刻を同一レコードにする」という単位で扱います。LastBootUpTimeは現在のOSインスタンスの起動時刻を示す。イベントログは補助証拠であり、ログ消去や保存期間の影響を受ける。対象が複数なら表示名の部分一致で先頭を採らず、一意になる条件を追加します。
Windowsの最終起動時刻と稼働時間を始める前に、PowerShellの版、コマンドの提供元、必要権限、管理ポリシーの有無を確認します。権限不足と対象なしは意味が異なるため、例外を0件へ置き換えません。
イベント6005だけに依存しない
イベント6005だけに依存しないでは、Win32_OperatingSystemのLastBootUpTimeを取得し、現在時刻との差からTimeSpanとして稼働時間を計算する。Windowsの最終起動時刻と稼働時間の例中にある名前、パス、ID、時刻はサンプルなので、そのまま本番へ貼らず、直前の読み取り結果から承認値を入れます。
$os = Get-CimInstance Win32_OperatingSystem
[pscustomobject]@{ LastBoot = $os.LastBootUpTime; Uptime = (Get-Date) - $os.LastBootUpTime }
日付文字列へ早期変換するとタイムゾーンやカルチャ差で誤計算する。DateTimeのまま差を求める。Windowsの最終起動時刻と稼働時間でプレビュー対応コマンドを使える場合はWhatIfを先に実行し、非対応の操作は対象一覧と引数を画面へ出して人が承認してから一度だけ実行します。
高速スタートアップで解釈が変わる場面
日付文字列へ早期変換するとタイムゾーンやカルチャ差で誤計算する。DateTimeのまま差を求める。高速スタートアップで解釈が変わる場面に該当したら、警告を消して継続するのではなく、どの条件で止まったかを記録します。
CIM取得失敗ならリモート管理、権限、対象端末を確認し、イベント0件を『起動していない』と解釈しない。Windowsの最終起動時刻と稼働時間ではエラー本文、FullyQualifiedErrorId、対象ID、直前に成功した段階を残すと、別担当者が安全な地点から調査できます。
将来時刻や負の差を異常扱い
将来時刻や負の差を異常扱いでは同じ対象を別経路でもう一度読みます。判定したいのは「コマンドが終了したか」ではなく、起動時刻が現在より過去で、稼働時間が非負となり、直近の起動関連イベントとも大きく矛盾しないかどうかです。
Get-WinEvent -FilterHashtable @{ LogName='System'; Id=6005,6006,6008,1074 } -MaxEvents 20
CIM取得失敗ならリモート管理、権限、対象端末を確認し、イベント0件を『起動していない』と解釈しない。Windowsの最終起動時刻と稼働時間の期待値と実測値が一致しないときは追加変更を重ねず、対象識別、権限、ポリシー、時間差の順で原因を分けます。
監視値へ端末時刻も添える
再起動確認では予定時刻との差、1074の理由、6008の予期しない停止を別項目として残す。Windowsの最終起動時刻と稼働時間を繰り返す場合は、正常、対象なし、要承認、失敗を異なる終了状態として記録し、前回値との比較だけで異常を決めません。
| 監視値へ端末時刻も添えるの識別軸 | 端末名、Win32_OperatingSystem.LastBootUpTime、LocalDateTime、取得時刻を同一レコードにする |
| 採用する実測 | 起動時刻が現在より過去で、稼働時間が非負となり、直近の起動関連イベントとも大きく矛盾しない |
| 0件時の扱い | CIM取得失敗ならリモート管理、権限、対象端末を確認し、イベント0件を『起動していない』と解釈しない |
| 保留にする兆候 | 日付文字列へ早期変換するとタイムゾーンやカルチャ差で誤計算する。DateTimeのまま差を求める |
Windowsの最終起動時刻と稼働時間の実行記録には、開始前の対象候補、採用した識別値、実行したコード、終了後の実測、除外した候補と理由を同じ作業番号で残します。特に「端末名、Win32_OperatingSystem.LastBootUpTime、LocalDateTime、取得時刻を同一レコードにする」を省くと、後日の再確認で別対象の値を比較するおそれがあります。画面コピーだけでなく、日時と端末名を含む構造化した出力も保存します。
PowerShellを使ってシステムの最後のブートアップ時間を確認する方法を定期手順へ組み込む場合も、初回は対話的に候補を確認します。正常時は「起動時刻が現在より過去で、稼働時間が非負となり、直近の起動関連イベントとも大きく矛盾しない」、判定不能時は「CIM取得失敗ならリモート管理、権限、対象端末を確認し、イベント0件を『起動していない』と解釈しない」、中止時は「日付文字列へ早期変換するとタイムゾーンやカルチャ差で誤計算する。DateTimeのまま差を求める」をそれぞれ別の結果として扱います。これにより、0件や例外を都合よく成功へ丸めず、次の担当者が同じ対象と条件で追試できます。
公式情報・参考資料
Windowsの最終起動時刻と稼働時間で使うコマンド名、引数、対応環境は次のMicrosoft一次資料で確認しました。記事の確認日は2026年7月17日です。OSやモジュール更新後は、実行端末のGet-Helpと併せて再確認してください。

コメント