[記事公開日]2026/01/26
PowerShellでブルースクリーン履歴を確認する方法(STOPコード/再起動痕跡)
ブルースクリーン(BSOD)は「Event ID 1001(BugCheck)」と「Kernel-Power 41」周辺に痕跡が残る。PowerShellで履歴を一覧化し、発生時刻・STOPコード・関連兆候を追う実務手順。
ブルースクリーン
BugCheck
切り分け
「突然再起動した」「電源が落ちたように見えた」「一瞬青い画面が出た気がする」――
実はこれ、ブルースクリーン(BSOD)→自動再起動の可能性があります。
ブルースクリーンは必ず画面にSTOPコードが表示される…と思われがちですが、
自動再起動が速い設定だと、ユーザーが見逃すことが多いです。
WindowsはBSODの痕跡をイベントログやダンプファイルとして残すため、
PowerShellで履歴を一覧化すれば「いつ、どんな停止が起きたか」を追えます。
※本記事は「履歴の確認」と「原因の方向性を掴む」ための手順です。
STOPコードの断定原因(特定ドライバやハード故障)まで詰めるには、ダンプ解析が必要になることがあります。
もくじ
1. まず結論:BSOD履歴は “BugCheck 1001” を軸に見る
- Event ID 1001(BugCheck):ブルースクリーンの痕跡が残る代表ログ
- Event ID 41(Kernel-Power):正常終了せず再起動した(結果ログ)
- Event ID 6008:予期しないシャットダウン(結果ログ)
まずは BugCheck(1001)で「BSODの事実」を確認し、
その前後に 41/6008 や WHEA、ドライバ/ストレージ系のエラーがないかを見ます。
2. 最短:BugCheck(1001)を一覧表示する
2-1. 直近50件のBSOD痕跡(Systemログ)
Get-WinEvent -FilterHashtable @{
LogName = "System"
Id = 1001
} -MaxEvents 50 |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
Message 内に STOPコード(BugCheck code)やダンプパス(例:C:\Windows\MEMORY.DMP)が含まれることがあります。
3. STOPコードを “抜き出して” 見やすくする(実務向け)
Message は長くて読みづらいので、STOPコードに関係する部分を抽出して一覧化します。
ただし、Messageの文面はOS言語やバージョンで差があるため、まずは“安全な範囲”で整形します。
3-1. Messageを1行化して貼りやすくする
Get-WinEvent -FilterHashtable @{
LogName = "System"
Id = 1001
} -MaxEvents 50 |
ForEach-Object {
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
Provider = $_.ProviderName
Id = $_.Id
Message = ($_.Message -replace "\r?\n"," ")
}
} |
Sort-Object TimeCreated -Descending |
Format-Table -AutoSize
3-2. “BugCheck code”っぽい数値を拾う(拾える環境のみ)
BugCheckの文面に「BugcheckCode」などが含まれる場合に限り、数値抽出できます(環境差あり)。
Get-WinEvent -FilterHashtable @{
LogName = "System"
Id = 1001
} -MaxEvents 80 |
ForEach-Object {
$msg = ($_.Message -replace "\r?\n"," ")
$m = [regex]::Match($msg, "(?i)(bugcheck|bug check)\s*(code|値)?\s*[:=]?\s*(0x[0-9a-fA-F]+|\d+)")
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
CodeHint = if($m.Success){ $m.Groups[3].Value } else { "" }
Message = $msg
}
} |
Sort-Object TimeCreated -Descending |
Select-Object -First 50 |
Format-Table -AutoSize
4. 「落ちたように見えた」ケースの確認:Kernel-Power 41 / 6008 も並べて見る
BSODが起きると、結果として 41 / 6008 が一緒に出ることが多いです。
「1001が無い=BSODじゃない」とは限りませんが、並べて見ると状況が分かりやすくなります。
4-1. 41 / 6008 / 1001 をまとめて表示
Get-WinEvent -FilterHashtable @{
LogName = "System"
Id = 41, 6008, 1001
} -MaxEvents 120 |
Select-Object TimeCreated, Id, ProviderName, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
5. ハード系の可能性を上げる:WHEA(ハードウェアエラー)確認
BSODの原因がCPU/メモリ/PCIe/ストレージなどハード寄りの場合、WHEAが出ることがあります。
BSODの前後にWHEAが多発していないか確認します。
5-1. WHEA-Logger を一覧表示
Get-WinEvent -FilterHashtable @{
LogName = "System"
ProviderName = "Microsoft-Windows-WHEA-Logger"
} -MaxEvents 60 |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
6. BSOD前後に多い“兆候”を拾う(ストレージ/ドライバ)
BSODの根っこがストレージやドライバの場合、直前にエラーが出ていることがあります。
代表的な系統をまとめて拾います。
6-1. ストレージ系(disk/Ntfs/stor*)のエラー
$days = 14
Get-WinEvent -FilterHashtable @{
LogName = "System"
StartTime = (Get-Date).AddDays(-$days)
} |
Where-Object {
$_.ProviderName -in @("disk","Ntfs","volmgr","partmgr","storahci","stornvme","nvme","storport","iaStorA","iaStorAC")
-and $_.LevelDisplayName -in @("Error","Warning","Critical")
} |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 200
6-2. ドライバ初期化/デバイスエラー(Kernel-PnP / DriverFrameworks)
$days = 14
Get-WinEvent -FilterHashtable @{
LogName = "System"
StartTime = (Get-Date).AddDays(-$days)
} |
Where-Object {
$_.ProviderName -in @("Microsoft-Windows-Kernel-PnP","Microsoft-Windows-DriverFrameworks-UserMode")
-and $_.LevelDisplayName -in @("Error","Warning")
} |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 200
7. ダンプファイルがあるか確認する(解析の入口)
STOPコードの原因特定を進めるなら、ダンプ(MEMORY.DMP や Minidump)が必要になることがあります。
まずは「ファイルが存在するか」を確認します。
7-1. Minidump / MEMORY.DMP の有無を確認
# ミニダンプ(複数あることが多い) Get-ChildItem "C:\Windows\Minidump" -ErrorAction SilentlyContinue | Select-Object Name, Length, LastWriteTime | Sort-Object LastWriteTime -Descending | Select-Object -First 20 # メモリダンプ(大きい) Get-Item "C:\Windows\MEMORY.DMP" -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime
ダンプが無い場合は、設定(自動再起動/ダンプ種類/保存先)や、ストレージ容量不足などで残らないこともあります。
8. 実務のまとめ:調査の最短ルート(迷ったらこの順)
- BugCheck(1001)を一覧化して、BSODが起きた日時を確定
- 同時刻付近の 41 / 6008 を確認(「落ちたように見えた」も含める)
- WHEA(ハード)と、ストレージ/ドライバのエラー兆候を前後で確認
- Minidump / MEMORY.DMP の有無を確認(必要なら解析へ)
BSODが頻発している状態での“長時間運用”は、データ破損や起動不能に繋がることがあります。
ストレージ系のエラー兆候が出ている場合は、診断より先にバックアップ/救出を優先してください。
➡️ 関連記事(タイトル順)
- PowerShellで起動時間が遅い原因を調べる方法(イベントログでボトルネック特定)
- PowerShellで接続された外付けストレージ履歴を確認する方法(USB/外付けHDD/SSD/SDカード)
- PowerShellでブルースクリーン履歴を確認する方法(STOPコード/再起動痕跡)
- PowerShellでバッテリー劣化を数値で確認する方法(ノートPC)
- PowerShellでネットワーク切断履歴を調べる方法(有線・Wi-Fi共通)
- PowerShellでドライバーエラーを一覧表示する方法(デバイス不調の切り分け)
- PowerShellで「電源が落ちた原因」を調べる方法(Event ID 41 / 6008 実践)
- PowerShellでWindowsアップデート失敗履歴を確認する方法(原因の手掛かりをログで掴む)
- PowerShellでUSB抜き差し履歴を確認する方法(接続・切断・認識不良の痕跡)
- PowerShellでSSD / HDDの異常兆候を調べる方法(SMART的観点)
