Windows命令行(含WMIC/PowerShell)可读取外接存储硬件级唯一ID吗
结论
存在符合要求的、厂商预置固化、不受格式化/跨主机使用影响的唯一标识符,可直接通过WMIC、PowerShell读取,完全可以集成到现有批处理备份日志流程中。
两类可用的硬件级唯一标识
- USB主控固件序列号:由USB设备(U盘主控、移动硬盘盒桥接主控)厂商生产时写入固件,遵循USB Mass Storage类设备规范,不随分区、格式化、挂载主机变化。仅极少数无牌杂牌设备会出现同批次共用同一序列号的情况,正规消费级/企业级存储产品该值全局唯一。
- 存储介质原生序列号:由闪存颗粒、机械硬盘盘体的控制芯片厂商生产时固化,和文件系统、系统分配的盘符/实例ID完全无关,格式化、重新分区操作均不会修改该值。
命令行读取方法
WMIC 命令(兼容所有Windows版本,可直接嵌入批处理脚本)
读取USB外接存储的介质序列号
直接执行以下命令,返回结果中的SerialNumber字段即为存储介质固化序列号:wmic diskdrive where "InterfaceType='USB'" get Model,SerialNumber,Size /format:list读取USB主控固件序列号
执行以下命令,返回结果中DeviceID字段最后一段反斜杠后的字符串,即为USB主控固件序列号:wmic path Win32_PnPEntity where "Service='USBSTOR' and PNPClass='DiskDrive'" get Name,DeviceID /format:list
示例返回值:
DeviceID=USBSTOR\DISK&VEN_SAMSUNG&PROD_PSSD_T7&REV_0\S6PNS0WA200000,最后一段S6PNS0WA200000即为固化的主控序列号;若最后一段包含&符号(如012345&6789&0),则为系统自动生成的临时ID,不具备跨主机唯一性。
PowerShell 命令(Win10/11、Server 2016及以上系统兼容性更佳,输出格式更易解析)
- 读取USB存储介质序列号
Get-Disk | Where-Object Bustype -eq 'USB' | Select-Object FriendlyName,SerialNumber,Size
返回结果的SerialNumber字段即为存储介质原生序列号。
- 读取USB主控固件序列号
Get-PnpDevice -PresentOnly | Where-Object { $_.Class -eq 'DiskDrive' -and $_.Service -eq 'USBSTOR' } | Select-Object FriendlyName,DeviceID
同样取DeviceID最后一段反斜杠后的内容作为主控序列号。
避坑说明
- 不要使用
vol命令返回的卷序列号,该值是格式化文件系统时系统随机生成的,每次格式化都会改变,不符合要求。 - 不要使用系统设备管理器里带实例后缀的设备ID,这类ID是系统为了区分同型号设备自动生成的,跨主机后值会变化。
- 若采集到的序列号段包含
&字符,说明对应设备为杂牌、未写入厂商预置的唯一序列号,这类设备不存在可用的硬件固化ID,建议单独标记。 - 批量采集时建议同时记录主控序列号和介质序列号,两个值组合可覆盖99%以上正规品牌存储设备的唯一标识需求,避免个别移动硬盘盒桥接芯片不透传介质序列号导致的ID重复问题。
内容的提问来源于stack exchange,提问作者user316117
相关产品推荐
相关产品推荐

