[登録されているタグ]

[記事公開日]2026/01/26

PowerShellでドライバーエラーを一覧表示する方法(デバイス不調の切り分け)

「どのドライバーが・いつ・どうエラーを出しているか」を一括で把握する。PnP状態・イベントログ(Kernel-PnP / DriverFrameworks / Service Control)をPowerShellで一覧化する実務手順。

PowerShell
ドライバー
エラー確認
切り分け

「動作が不安定」「突然フリーズする」「特定の機能だけ使えない」――
こうした症状の裏では、ドライバーエラーが静かに起きていることがあります。
デバイスマネージャーを1つずつ見るのは非効率ですが、PowerShellを使えば
“今エラー状態のドライバー”
“過去にエラーを出した履歴”をまとめて確認できます。
この記事では、現場で使いやすい順にドライバーエラーの確認方法を整理します。

※ドライバーエラー=即ハード故障、ではありません。
OS更新・ドライバー更新・相性・省電力・一時的な初期化失敗なども多いため、
「いつから」「どのデバイスか」をログで把握することが重要です。

1. まず結論:ドライバーエラーの確認は3系統で見る

  • A:現在エラー状態のデバイス(PnPのStatus / ErrorCode)
  • B:ドライバーの読み込み・初期化失敗(Kernel-PnP / DriverFrameworks)
  • C:サービスとして動くドライバーの失敗(Service Control Manager:7000番台)

現場では、まずAで「今おかしい物」を掴み、B・Cで「いつから/なぜ」を詰めるのが最短です。

2. 今エラー状態のドライバーを一覧表示する(最重要)

まずは「現在エラーになっているデバイス」を一括表示します。
デバイスマネージャーでいう「!」や「?」に近い情報です。

2-1. Status が OK 以外のPnPデバイスを一覧表示

Get-PnpDevice |
Where-Object { $_.Status -ne "OK" } |
Select-Object Status, Class, FriendlyName, InstanceId |
Sort-Object Class, FriendlyName
      

Status が Error / Degraded / Unknown などの場合、
そのデバイス(=ドライバー)が正常に動作していません。

2-2. 問題コード(ConfigManagerErrorCode)も確認する

Get-CimInstance Win32_PnPEntity |
Where-Object { $_.ConfigManagerErrorCode -ne 0 } |
Select-Object Name, DeviceID, ConfigManagerErrorCode |
Sort-Object ConfigManagerErrorCode
      
  • Code 10:このデバイスを開始できません
  • Code 28:ドライバーがインストールされていません
  • Code 43:デバイスに問題が発生しました(GPUで多い)

3. ドライバー初期化エラーの履歴を見る(Kernel-PnP)

デバイスが「一瞬は認識する」「再起動で直ったり直らなかったり」する場合、
ドライバーの初期化失敗がイベントログに残ります。

3-1. Kernel-PnP のエラー・警告を一覧表示

Get-WinEvent -FilterHashtable @{
  LogName = "System"
  ProviderName = "Microsoft-Windows-Kernel-PnP"
} -MaxEvents 300 |
Where-Object { $_.LevelDisplayName -in @("Error","Warning") } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
      

Message 内に InstanceId(PCI\… / USB\…)が出るため、
PnPデバイスの InstanceId と突き合わせると「どのデバイスか」が特定できます。

4. UMDF / KMDF ドライバーの失敗(DriverFrameworks)

USB機器・センサー・一部周辺機器は、DriverFrameworks(UMDF/KMDF)経由で動きます。
ここが落ちると「認識はするが動かない」状態になりがちです。

4-1. DriverFrameworks-UserMode のエラー確認

Get-WinEvent -FilterHashtable @{
  LogName = "System"
  ProviderName = "Microsoft-Windows-DriverFrameworks-UserMode"
} -MaxEvents 200 |
Where-Object { $_.LevelDisplayName -in @("Error","Warning") } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
      

5. サービスとして動くドライバーの失敗(7000番台)

ネットワーク・ストレージ・セキュリティ系ドライバーは、
Windowsサービスとして起動し、失敗すると 7000 番台のエラーを出します。

5-1. Service Control Manager(7000番台)を抽出

Get-WinEvent -FilterHashtable @{
  LogName = "System"
  ProviderName = "Service Control Manager"
} -MaxEvents 300 |
Where-Object { $_.Id -in 7000,7001,7009,7011,7023,7024,7031,7034 } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
      

「タイムアウト」「開始できませんでした」などが繰り返し出る場合、
対応するドライバー(NIC / ストレージ / セキュリティ)の不調が疑われます。

6. 特定デバイスだけを深掘りする(InstanceIdで絞る)

問題のありそうなデバイスが分かったら、その InstanceId を軸にログを絞ると、
「いつからおかしいか」が明確になります。

下の $needle に、PCI\ / USB\ / ACPI\ などの InstanceId 文字列を入れてください。

$days = 30
$needle = "PCI\\VEN_"   # 例:GPU / NIC など

Get-WinEvent -FilterHashtable @{
  LogName   = "System"
  StartTime = (Get-Date).AddDays(-$days)
} |
Where-Object {
  $_.Message -match [regex]::Escape($needle)
} |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated
        

7. よくあるドライバーエラーパターン(現場視点)

7-1. Windows Update直後からエラー

  • 自動更新でドライバーが置き換わった
  • メーカー提供ドライバーとの相性問題

7-2. スリープ復帰後にエラー

  • 省電力設定でデバイスが復帰できない
  • Wi-Fi / Bluetooth / USBで多い

7-3. 特定の負荷時だけエラー

  • GPU・ストレージ・NICの物理劣化
  • 冷却不足・電源不安定

ドライバーエラーが頻発している状態で使い続けると、
フリーズ・ブルースクリーン・データ破損に繋がることがあります。
ログで兆候が見えたら、早めの切り分けをおすすめします。

➡️ 関連記事(タイトル順)

すべてを開く | すべてを閉じる

ページ上部へ戻る