[記事公開日]2026/01/26
PowerShellでドライバーエラーを一覧表示する方法(デバイス不調の切り分け)
「どのドライバーが・いつ・どうエラーを出しているか」を一括で把握する。PnP状態・イベントログ(Kernel-PnP / DriverFrameworks / Service Control)を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の物理劣化
- 冷却不足・電源不安定
ドライバーエラーが頻発している状態で使い続けると、
フリーズ・ブルースクリーン・データ破損に繋がることがあります。
ログで兆候が見えたら、早めの切り分けをおすすめします。
➡️ 関連記事(タイトル順)
- 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的観点)
