為什麼要刪除 USB 歷史?
Windows 為了即插即用體驗,會在註冊表記錄**每一個曾連接過的 USB 裝置**:裝置描述符、廠商/產品 ID (VID/PID)、序號、掛載卷標、掛載時間、磁碟機代號。這些資訊殘留在:
- `HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR` (裝置實例)
- `HKLM\SYSTEM\CurrentControlSet\Enum\USB` (裝置節點)
- `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2` (掛載點/自動播放關聯)
- `Setupapi.dev.log` / `Setupapi.app.log` (安裝日誌)
隱私風險:他人透過 `USBDeview`、`USBView`、註冊表編輯器即可重現你插過什麼隨身碟、外接硬碟、手機、甚至推測你備份/竊取了什麼資料。
工具法:USBView (微軟官方 WDK 工具) / USBDeview (NirSoft)
- 下載 USBView (Windows Driver Kit 附屬) 或 USBDeview (免費、免安裝、介面友善、支援命令列)。
- 解壓/執行 `UsbViewer.exe` / `USBDeview.exe`。
- 點擊 「檢視痕跡」/「View Traces」,列出所有歷史 USB 裝置。
- 點擊 「清除痕跡」/「Clear Traces」 → 選擇「清除選取項」/「清除所有項目」/「清除非即插即用裝置」。
- 確認完成,重新開啟工具驗證清單已空。
手動註冊表清理法 (無工具環境)
- `regedit` → 定位 `HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR` → 右鍵匯出備份 → 刪除目標裝置對應的子鍵 (以 VID/PID/序號識別)。
- 同理清理 `HKLM\SYSTEM\CurrentControlSet\Enum\USB` 相關子鍵。
- `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2` → 刪除對應 `{GUID}` 子鍵。
- 刪除 `%SystemRoot%\inf\setupapi.dev.log` 與 `setupapi.app.log` (需管理員權限,系統會自動重建空檔)。
- 重啟電腦生效。
自動化腳本 (PowerShell 定期清理)
$usbKeys = @(
'HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR',
'HKLM:\SYSTEM\CurrentControlSet\Enum\USB',
'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2'
)
foreach ($key in $usbKeys) {
Get-ChildItem $key | Where-Object { $_.Name -match 'VID_&PID_' } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
# 清理 Setupapi logs
Remove-Item "$env:SystemRoot\inf\setupapi.dev.log" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:SystemRoot\inf\setupapi.app.log" -Force -ErrorAction SilentlyContinue
存為 `Clear-USBHistory.ps1`,排程工作每日/每週執行。
注意事項
- 清理後,**再次插入同一 USB 裝置會重新安裝驅動、重新分配磁碟機代號**,屬正常現象。
- 若 USB 裝置為**加密隨身碟/硬體金鑰/授權狗**,清理歷史可能導致授權軟體無法識別裝置,需重新授權/插拔重試。
- 企業環境建議透過群組原則部署清理腳本,或使用端點管理工具 (SCCM/Intune) 定期清理。