2016-02-26 126 views
2

我正在归档我公司的大量硬盘驱动器,并且我有一个PowerShell脚本,可以从Windows操作系统安装中获取主机名和用户列表,并且我想以编程方式查找序列号的驱动器以及。我有以下一些Powershell代码(大部分完成)应该这样做,但也有一些复杂的情况。使用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或其他信息)?

回答

1

AFAIK SerialNumber是可选的,并由驱动程序提供。所以,如果USB底座驱动程序不提供信息给Windows,那么没有简单的方法来检索它。

0

thread(查找“马克西姆Shatskih”)说,IOCTL_SCSI_PASS_THROUGHUSBSTOR支持,所以这将是可能写出或找到一个方案,能够通过传递适当的SCSI得到一个USB连接驱动器的序列号命令到驱动器(获取模式页面80h)。

对于Windows(它最初是为Linux编写的,但移植到Windows),可能需要的软件包是sg3_utils

0

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

谢谢大家的意见。

相关问题