予期しないシャットダウンを調べる|イベント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の修理や設定の変更は含みません。