2

我在我的公司存档了大量的硬盘驱动器,我有一个 powershell 脚本,它从 Windows 操作系统安装中获取主机名和用户列表,我也想以编程方式找到驱动器的序列号。我有以下应该执行此操作的 Powershell 代码(大部分已完成),但也有一个复杂的问题。

$Disks = Get-WMIObject -class win32_PhysicalMedia
$SerialNumber = foreach($Disk in $Disks) {IF ($Disk.SerialNumber -ne '     WD-WCC2EAV91692') {[do something here]}}

我正在将驱动器与 USB HDD 坞站连接,并且似乎如果计算机通过内部连接的驱动器启动(通过 SATA 电缆,我尚未在外部进行测试),则该SerialNumber字段已填充。但是,如果我在计算机启动后连接它,该SerialNumber字段始终为空白。当我连接驱动器时,有没有办法让计算机重新扫描此信息,或者此信息是否仅在启动时收集,例如,通过 BIOS 或其他方式?

4

3 回答 3

1

AFAIKSerialNumber是可选的,由驱动程序提供。因此,如果 USB-dock 驱动程序没有向 Windows 提供信息,那么就没有简单的方法来检索它。

于 2016-02-27T00:48:12.553 回答
0

线程(查找“Maxim Shatskih”)表示IOCTL_SCSI_PASS_THROUGH受支持USBSTOR,因此可以编写或找到可以从 USB 连接的驱动器获取序列号的程序,方法是将适当的 SCSI 命令传递给驱动器(获取模式页 80h)。

一个可以满足您需要的软件包是sg3_utils用于 Windows(它最初是为 Linux 编写的,但已移植到 Windows)。

于 2016-02-28T01:20:39.983 回答
0

我刚刚测试了使用 USB 扩展坞中的 HDD 启动计算机,我得到了相同的结果。从技术上讲,SerialNumber 字段不是空白的,而是全为零而不是实际的序列号,这可能只是相同的区别。作为脚本的一部分(假设它甚至可能),看起来它可能比它的价值更多的工作,所以我可能会继续将 SN 条形码扫描到脚本中。这是一个额外的步骤,但只需要几秒钟。

感谢大家的投入。

于 2016-02-29T19:00:39.377 回答