PowerShell是Windows中自动化管控USB设备最灵活的工具,支持通过Get-PnpDevice获取硬件ID、Disable-PnpDevice禁用实例、Stop-Service禁用USBSTOR服务,并可结合事件监听实现插入即拦截,还兼容usbipd-win进行设备级隔离。
powershell 是 windows 系统中实现 usb 设备自动化管控最灵活、可编程性最强的工具。它不依赖组策略(适用于家庭版),也不需要手动编辑注册表,而是通过设备枚举、属性匹配和驱动控制,精准识别并禁用非法 usb 设备——比如未授权的 u 盘、伪装成存储设备的恶意硬件、或特定厂商型号的串口调试器。
获取并筛选非法设备的硬件标识
合法与非法设备的本质区别常体现在硬件 ID(Hardware ID)上。PowerShell 可实时扫描所有已连接 USB 设备,并提取其唯一标识用于比对:
- 运行 Get-PnpDevice -Class "USB" | Where-Object {$_.Status -eq "OK"} 列出当前正常工作的 USB 设备
- 对每个设备使用 Get-PnpDeviceProperty -KeyName "DEVPKEY_Device_HardwareIds" 获取完整硬件 ID,例如 USB\VID_1234&PID_5678
- 将已知非法设备的 VID/PID 组合存入白名单/黑名单数组,如 $blockedVids = @("0781","13fe"),再用 -match 或 Contains 快速过滤
禁用设备的两种可靠方式
PowerShell 不直接“卸载驱动”,而是通过系统接口触发禁用动作,确保操作可逆且不破坏设备树:
- 方法一:调用 PnP 接口禁用设备实例 —— 使用 Disable-PnpDevice -InstanceId $instanceId -Confirm:$false,适用于已知设备实例 ID 的场景(如从上一步筛选结果中提取)
- 方法二:停用对应驱动服务 —— 对 USB 存储类设备,可执行 Stop-Service USBSTOR -Force 并设为禁用(Set-Service USBSTOR -StartupType Disabled),但该方式影响所有同类设备,适合批量封控
实现插入即拦截的后台监听
单纯手动运行脚本无法应对新插入设备。需结合 Windows 事件日志 + PowerShell 作业实现“热响应”:
- 监听系统日志中 ID 为 20001(设备安装完成)或 20003(设备启用)的事件,来源为 Microsoft-Windows-DriverFrameworks-UserMode
- 用 Register-WmiEvent 或 Get-WinEvent -FilterHashtable 捕获事件,解析其中的 PnpInstanceID 字段
- 触发自定义函数:自动查硬件 ID → 匹配黑名单 → 调用 Disable-PnpDevice → 记录日志到指定文件
配合 usbipd-win 实现设备级隔离(进阶)
若需更高粒度控制(如仅禁止某台电脑访问特定 USB 设备,但允许其他机器使用),可引入 usbipd-win 模块:
- 先用 Get-UsbipdDevice 获取设备状态与绑定信息
- 对非法设备执行 Unbind-UsbipdDevice,切断其被共享或本地使用的通路
- 配合 Start-UsbipdService 和防火墙规则,可构建“仅允许可信主机绑定”的 USB 设备访问策略











