windows环境下,wmi取不到固态硬盘真实的序列号,请问有啥其他方法能取到么?

1. 运行环境

2. 问题描述?

Windows环境下,通过wmic采集的固态硬盘序列号不准确。
是否有其他方法采集到实际序列号?
硬盘序列号

3. 您期望得到的结果?

AIDA获取序列号

4. 您实际得到的结果?

讨论数量: 8

file

是可以的

2个月前 评论
Tai_L9 (楼主) 2个月前

如果输出的 MediaType 没有明确标识为 SSD 或 HDD,可以使用以下 PowerShell 命令进一步检查: Get-PhysicalDisk | Select-Object DeviceID, MediaType, SerialNumber

2个月前 评论

楼主解决了吗?试试
wmic diskdrive get serialnumber
或者
Get-WmiObject Win32_PhysicalMedia | Select-Object SerialNumber

我也有个硬盘序列号全是 0000_0000_0000_0000_0000_0100_0000_0000.

2个月前 评论
Tai_L9 (楼主) 2个月前
yanling (作者) 2个月前

我刚研究了一下,有个开源的工具叫 smartmontools ,www.smartmontools.org/wiki/Downloa...

你可以下载安装,把安装目录中bin目录的" smartctl " 二进制文件拿出来单独用,1M左右大小。

这个文件可以读取输出硬盘的序列号。 我的电脑一块m2 固态 一块sata固态,m2使用上述命令无法读取输出序列号,smartctl 正常读取输出。

file

file

2个月前 评论

又找到一个办法。发现了一个项目:github.com/a1ive/libcdi

这个是无忧论坛的wintoflash 大佬编写的,windows获取硬盘信息的,编译好的exe才78k,直接拿来用。

以管理员权限在cmd中运行这个exe,就输出硬盘的所有信息了,包括能查询的硬盘序列号。

golang用exec使用管理员权限调用这个exe,捕获输出,过滤关键词 Serial就行了 。
如果你会点c或者c++,可以单独抽离出来libcdi获取序列号的方法。

file

用cditest.exe只输出序列号的话,用

cditest.exe | findstr “Serial:”

Go

输出硬盘名称和序列号

cditest.exe | findstr /i /c:”Model:” /c:”Serial:”

Go

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!