使用Powershell获取硬盘序列号

时间:2016-02-26 22:11:08

标签: powershell wmi get-wmiobject

我正在我的公司存档大量的硬盘驱动器,我有一个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电缆,我尚未在外部进行测试)启动的,那么{{1} }字段已填充。但是,如果我在计算机启动后连接它,则SerialNumber字段始终为空。当我连接驱动器时,有没有办法让计算机重新扫描此信息,或者这些信息仅在启动时收集,例如,由BIOS或其他东西收集?

3 个答案:

答案 0 :(得分:1)

AFAIK SerialNumber是可选的,由驱动程序提供。因此,如果USB-dock驱动程序未向Windows提供信息,则无法轻松检索它。

答案 1 :(得分:0)

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

可能执行所需操作的程序包是sg3_utils for Windows(它最初是为Linux编写的,但移植到Windows)。

答案 2 :(得分:0)

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

感谢大家的投入。