[登録されているタグ]

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

PowerShellで接続された外付けストレージ履歴を確認する方法(USB/外付けHDD/SSD/SDカード)

「いつ・どの外付けストレージが・どのPCに接続されたか」をログとPnP情報で追う。DeviceSetupManager / Kernel-PnP / Partition / Mount情報をPowerShellで一覧化する実務手順。

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→前後ログ」の順で詰める

  1. DeviceSetupManager / Kernel-PnP で「接続(追加)」っぽい時刻を掴む
  2. Message内の InstanceId(USBSTOR\… / USB\VID_…)を控える
  3. その時刻の前後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では、運用ルールに沿って調査を行ってください。

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

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

ページ上部へ戻る