有两种最流行的方式:PowerShell(PowerShell.Create()...
)和WMI(ManagementObjectSearcher
)。
1] PowerShell Get-PhysicalDisk
可以正确检索磁盘,但是它没有VendorSpecific属性(SMART)。有Get-StorageReliabilityCounter
填充一些常用的SAMRT属性,但不是全部。具体来说,它不显示“重新分配的扇区数”和“待处理的扇区”
2)可以查询WMI SELECT * FROM Win32_DiskDrive
,但这显示了虚拟磁盘。实际的物理磁盘不存在。对于软件RAID(在磁盘管理中添加镜像)或对于存储空间,实际的物理磁盘已被过滤掉。 SELECT * FROM MSStorageDriver_FailurePredictData
显示了我正在寻找的SMRART(特定于Vendor)信息,但是也没有物理驱动器,也没有办法将“ InstanceName”与磁盘的实际列表关联。
同时,第三方软件可以清楚地显示物理磁盘和虚拟磁盘(存储空间本身),并可以为它们显示SMART:
最终,我希望将其存储在.Net应用程序中,并且我在Google代码中搜索了如何从WMI对象的VendorSpecific字段中提取此信息(重新分配的扇区数),但我只是看不到实际的WMI对象物理磁盘。
显然,对我来说,主要问题是小型家用服务器上的USB驱动器。对于存储空间或RAID上的USB设备,没有简单的解决方案。所有现有软件都有大量专有代码来支持不同制造商通过USB提供的SMART(特别是CrystalDiskInfo,它可以轻松显示隐藏在存储空间后面的所有USB驱动器的所有SMART),因此与100行C#代码解决方案相距甚远。
但是我发现最初的问题(我需要的2条记录)实际上是通过PowerShell解决的,Microsoft刚刚重命名了一些指标使其变得易于使用。
这是SMART转换为-> PowerShell Get-StorageReliabilityCounter
重新分配的扇区数-> ReadErrorsCorrected
待定部门-> ReadErrorsUncorrected
当我在一个驱动器上同时获得两个记录时,这一点很明显: