[記事公開日]2026/01/26
PowerShellで接続された外付けストレージ履歴を確認する方法(USB/外付けHDD/SSD/SDカード)
「いつ・どの外付けストレージが・どのPCに接続されたか」をログとPnP情報で追う。DeviceSetupManager / Kernel-PnP / Partition / Mount情報をPowerShellで一覧化する実務手順。
外付けストレージ
接続履歴
調査
「この外付けHDD、いつ接続した?」「USBメモリを挿したのは何日前?」「誰のPCに繋いだ?」――
外付けストレージの接続履歴は、情報漏えい調査や、紛失トラブル、故障切り分け(抜き差しで不調が出る等)でもよく使います。
Windowsは、USB機器の接続・デバイス設定・ボリュームのマウントなどを複数の場所に記録しており、
PowerShellでログを引き出せば接続の痕跡を時系列で追えます。
この記事では、現場で使いやすい順に「外付けストレージ履歴の確認方法」をまとめます。
※履歴の取得は、権限・ログ保持期間・ポリシー・OSバージョン・USBブリッジ(ケース)によって結果が変わります。
「出ない=接続していない」と断定せず、複数の観点で照合してください。
もくじ
1. まず結論:外付けストレージ履歴は “3つの痕跡” を組み合わせる
- A:デバイスが追加/設定された痕跡(DeviceSetupManager / Kernel-PnP)
- B:ボリュームがマウントされた痕跡(Partition / Mount関連のログ)
- C:今見えている接続デバイス情報(USB/ディスクの一覧)
最短はAで「いつ追加されたか」を押さえ、Bで「実際にドライブとして使われたか」を補強し、
Cで「現状の接続状態」を確認する流れです。
2. 最短:DeviceSetupManager で「接続/インストール履歴」を見る
Windowsが新しいデバイスを検出・セットアップした痕跡は、DeviceSetupManager のログに残ることがあります。
外付けストレージ(USBストレージ、USB-SATAブリッジ等)の「追加された時刻」を掴む入口として使えます。
2-1. DeviceSetupManager(Admin)を一覧表示
$days = 180
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-Windows-DeviceSetupManager/Admin"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 400 |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
2-2. “USB/Storageっぽい”ログに絞って見やすくする
$days = 365
$kw = "USB|STOR|Storage|Disk|UASP|SCSI|Mass Storage|ボリューム|ディスク"
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-Windows-DeviceSetupManager/Admin"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 2000 |
Where-Object { ($_.Message -replace "\r?\n"," ") -match $kw } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 300
ここで「デバイスが構成されました」「インストールされました」などの時刻が拾える場合があります。
次にKernel-PnPでより広く拾います。
3. Kernel-PnP(System)で接続痕跡を拾う(汎用)
Kernel-PnP はデバイスの接続・構成・ドライバ関連の痕跡が出ることが多く、
外付けストレージの調査でも頼れるログです。
3-1. Kernel-PnP の情報/警告/エラーを一覧表示
$days = 365
Get-WinEvent -FilterHashtable @{
LogName = "System"
ProviderName = "Microsoft-Windows-Kernel-PnP"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 800 |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
3-2. “USBストレージっぽいInstanceId”を含むログに絞る
USBストレージは Message に USBSTOR\ や USB\VID_ が出ることがあります。
まずは広めに拾い、該当デバイスのID(InstanceId)を特定するのがコツです。
$days = 365
$kw = "USBSTOR\\|USB\\VID_|UASPSTOR\\|SCSI\\Disk|Disk&Ven_|Removable"
Get-WinEvent -FilterHashtable @{
LogName = "System"
ProviderName = "Microsoft-Windows-Kernel-PnP"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 5000 |
Where-Object { ($_.Message -replace "\r?\n"," ") -match $kw } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 400
4. 「ドライブとしてマウントされた履歴」を見る(実使用の痕跡)
“USB機器として認識された”だけではなく、“ドライブとして使われた”痕跡も欲しい場合は、
ボリューム/パーティション周りのログを見ます。外付けHDD/SSDで特に有効です。
4-1. Partition(Operational)を確認(ボリュームの追加/認識)
$days = 365
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-Windows-Partition/Operational"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 400 |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending
4-2. “マウント/ボリューム”っぽいものに絞る
$days = 365
$kw = "volume|mount|マウント|ボリューム|drive|ドライブ|assigned|割り当て"
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-Windows-Partition/Operational"
StartTime = (Get-Date).AddDays(-$days)
} -MaxEvents 2000 |
Where-Object { ($_.Message -replace "\r?\n"," ") -match $kw } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 300
Partitionログが無い/少ない環境もあります。その場合は次のSystemログ(disk/Ntfs)側も併せて確認します。
5. Systemログ(disk/Ntfs)で「接続と切断の痕跡」を補強する
外付けを挿すと disk / Ntfs / partmgr / volmgr などが動きます。
ここを拾うと「ディスクが現れた/消えた」「読み書きエラーが出た」などの痕跡が取れることがあります。
5-1. disk/Ntfs/partmgr/volmgr をまとめて抽出
$days = 180
Get-WinEvent -FilterHashtable @{
LogName = "System"
StartTime = (Get-Date).AddDays(-$days)
} |
Where-Object {
$_.ProviderName -in @("disk","Ntfs","partmgr","volmgr")
} |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 300
6. 現状確認:今PCに接続されている外付けストレージを一覧表示
「履歴」とは別に、今刺さっている外付けストレージを確認するコマンドも用意しておくと便利です。
調査中に差し替えが起きた場合の確認にも使えます。
6-1. USBデバイス(ディスク系)をざっくり表示
Get-PnpDevice -PresentOnly |
Where-Object { $_.InstanceId -like "USB*" } |
Select-Object Status, Class, FriendlyName, InstanceId |
Sort-Object Class, FriendlyName
6-2. ディスク一覧(型番/FriendlyName/BusType)
Get-Disk | Select-Object Number, FriendlyName, BusType, SerialNumber, HealthStatus, OperationalStatus, Size | Format-Table -AutoSize
6-3. 「どのドライブ文字がどのボリュームか」
Get-Volume | Where-Object { $_.DriveLetter } | Select-Object DriveLetter, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining, Size | Format-Table -AutoSize
※SerialNumber は取得できない機器もあります(USBブリッジや機種による差があります)。
7. 実務のコツ:履歴は「時刻→デバイスID→前後ログ」の順で詰める
- DeviceSetupManager / Kernel-PnP で「接続(追加)」っぽい時刻を掴む
- Message内の InstanceId(USBSTOR\… / USB\VID_…)を控える
- その時刻の前後10分で、Partition / disk / Ntfs を掘って「実使用の痕跡」を補強する
「時刻が分かっている」場合は、前後10分でまとめて掘るのが一番早いです。
# 例:接続したと思われる時刻を指定
$t = Get-Date "2026-01-26 10:20:00"
$from = $t.AddMinutes(-10)
$to = $t.AddMinutes(10)
# 接続系(Kernel-PnP)
Get-WinEvent -FilterHashtable @{
LogName = "System"
ProviderName = "Microsoft-Windows-Kernel-PnP"
StartTime = $from
EndTime = $to
} |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated
# マウント系(Partition)
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-Windows-Partition/Operational"
StartTime = $from
EndTime = $to
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Sort-Object TimeCreated
# ディスク/ファイルシステム系(System)
Get-WinEvent -FilterHashtable @{
LogName = "System"
StartTime = $from
EndTime = $to
} |
Where-Object { $_.ProviderName -in @("disk","Ntfs","partmgr","volmgr") } |
Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, Message |
Sort-Object TimeCreated
外付けストレージの調査は、用途によってはプライバシー/監査の要件に関わります。
会社PCや共有PCでは、運用ルールに沿って調査を行ってください。
➡️ 関連記事(タイトル順)
- 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的観点)
