予期しないシャットダウンを調べる|イベントID 41・6008をPowerShellで数える
EA用のPCがフリーズして、スマートプラグで電源を入れ直したり、停電で落ちたりした後は、Windowsが正しく終了しなかった記録がイベントログに残ります。どれくらいの頻度で起きているかを数えておくと、PCの不調や電源の問題に早く気づけます。この記事では、Microsoftの資料をもとに、関係するイベントIDの意味と、PowerShellで回数を数える方法を、筆者のPCで実行した結果とあわせて紹介します。
(確認:Microsoft Learn「イベント ID 41 の高度なトラブルシューティング」「about_Execution_Policies」「about_PowerShell_exe」「Get-WinEvent」。筆者のWindows 11のPCで、2026年10月21日に実行。イベントログの読み取りだけで、設定は変えていません)
見るべきイベントID(Microsoftの説明)
| ID | ログの出し手 | 意味(Microsoft Learn) |
|---|---|---|
| 41 | Kernel-Power | システムが最初に正常にシャットダウンされずに再起動した。電源の中断や停止エラーで起こりうる。次の起動の時に記録される |
| 6008 | EventLog | 不適切なシャットダウン(ダーティ シャットダウン)があった |
| 1074 | User32 | アプリケーションがシステムのシャットダウンまたは再起動を始めた |
| 6006 | EventLog | Windowsが適切にオフになった |
Microsoftの資料では、イベントID 41が起きる場面として、停止エラー(ブルースクリーン)で再起動した場合、電源ボタンを押して再起動した場合、応答しなくなった・ランダムに再起動した場合が挙げられています。スマートプラグで電源を切るのも、Windowsから見れば「正しく終了しないまま電源が落ちた」状態なので、次の起動でID 41・6008が記録されると考えられます。
コード(PowerShell)
直近N日のシステムログから、4つのIDの件数と、最新の日時を数えます。管理者の権限は要りません。
# 直近N日の、シャットダウン・再起動に関するイベントを数える(読み取りのみ・管理者権限は不要)
# 41 Kernel-Power:正しくシャットダウンされずに再起動した(電源が落ちた・フリーズからの強制再起動など)
# 6008 EventLog :前回のシャットダウンは予期しないものだった
# 1074 User32 :アプリケーションなどがシャットダウン・再起動を始めた(Windows Update・shutdownコマンドなど)
# 6006 EventLog :Windowsが正しく終了した
param([int]$Days = 30)
$since = (Get-Date).AddDays(-$Days)
$ids = 41, 6008, 1074, 6006
$events = Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = $ids; StartTime = $since } -ErrorAction SilentlyContinue
"直近 $Days 日($($since.ToString('yyyy-MM-dd')) 以降)"
foreach ($id in $ids) {
$e = @($events | Where-Object Id -eq $id)
$last = if ($e.Count) { ($e | Sort-Object TimeCreated -Descending | Select-Object -First 1).TimeCreated.ToString('yyyy-MM-dd HH:mm') } else { '-' }
"{0,5} {1,-34} {2,3} 件 最新 {3}" -f $id, ($e | Select-Object -First 1).ProviderName, $e.Count, $last
}
日本語のコメントを含むスクリプトは、Windows PowerShell 5.1では、文字コードをUTF-8(BOM付き)で保存しないと、文字化けして構文エラーになることがあります。筆者のPCでも、BOMなしで保存した時はエラーになりました。
実行の仕方:実行ポリシーに注意
Microsoftの説明では、どのスコープにも実行ポリシーが設定されていない場合、有効な実行ポリシーは Restricted で、これがWindowsクライアントの既定値です。筆者のPCも、LocalMachine が Restricted で、そのまま実行すると「このシステムではスクリプトの実行が無効になっているため」というエラーで止まりました。設定を変えずにその場だけ実行するには、次のように、PowerShellの起動時に実行ポリシーを指定します(Microsoftの powershell.exe の説明では、このパラメーターは現在のセッションの既定の実行ポリシーを設定し、レジストリに設定されている実行ポリシーは変更しません)。
powershell -NoProfile -ExecutionPolicy Bypass -File .\Get-ShutdownEvents.ps1 -Days 365
筆者のPCの結果(直近365日)
直近 365 日(2025-10-21 以降)
41 Microsoft-Windows-Kernel-Power 9 件 最新 2026-09-07 18:05
6008 EventLog 9 件 最新 2026-09-07 18:05
1074 User32 9 件 最新 2026-06-26 11:58
6006 EventLog 9 件 最新 2026-06-26 11:58
| 読み取れること | 内容 |
|---|---|
| 正しく終了しなかった回数 | 9回(ID 41・6008が同じ9件)。最新は2026年9月7日 |
| 正しく終了した回数 | 9回(ID 1074・6006が同じ9件)。最新は2026年6月26日 |
| 今の状態 | 最後の起動は、正しく終了しなかった後の起動(2026年9月7日 18:05)。直近30日では、どのIDも0件だった |
1年で9回、正しく終了しないまま再起動していたことになります。筆者のPCでは、この9回がフリーズによるものか、停電や電源の操作によるものかは、この集計だけでは区別できません。Microsoftの資料にも、イベントID 41だけでは、何が起きたかを明確に判断する情報が足りない場合がある、と書かれています。原因を絞る時は、ID 41の詳細(BugcheckCode など)や、同じ時刻のほかのログを見ます。
使い方の例
- 毎月1回、件数を記録する:ID 41が増えていく場合は、PCの不調・電源・熱などを疑うきっかけになる
- スマートプラグで再起動した後に確かめる:ID 41が増えていれば、電源の入れ直しで起動したことが分かる。その後、ディスクの状態も確かめる(chkdskの使い分け・SSD・HDDの状態の確かめ方)
- Windows Updateの再起動と区別する:ID 1074は、アプリケーションなどが始めたシャットダウン・再起動なので、計画された再起動はこちらに入る(Windows Updateの再起動でMT5のEAが止まる)
外出先からの再起動の方法と、スマートプラグを使う時のBIOSの設定は、外出先からEA用PCを再起動する方法にまとめています。
この記事で確かめていないこと
- 筆者のPCの9回の原因(フリーズ・停電・電源操作のどれか)
- スマートプラグで電源を切った時に、実際にID 41が記録されるか(スマートプラグでの検証はしていません)
- VPSなど仮想マシンでの記録のされ方
まとめ
- 正しく終了しなかった再起動は、イベントID 41(Kernel-Power)と6008に、正しい終了は1074と6006に記録される(Microsoft Learn)
- PowerShellで件数を数えられる。Windowsの既定の実行ポリシーは Restricted なので、その場だけ
-ExecutionPolicy Bypassで実行する - 筆者のPCは、直近365日で、正しく終了しなかった再起動が9回、正しい終了が9回だった
本記事はイベントログの読み取りの方法の説明です。PCの修理や設定の変更は含みません。


