2016-02-26 285 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條形碼掃描到腳本中。這是一個額外的步驟,但只需要幾秒鐘。

謝謝大家的意見。